如何使用基本身份验证保护 android/ios 应用程序的 Web API

Posted

技术标签:

【中文标题】如何使用基本身份验证保护 android/ios 应用程序的 Web API【英文标题】:How to secure Web API for android/ios apps with basic authentication 【发布时间】:2015-07-29 21:40:21 【问题描述】:

我正在尝试保护Web API,它将被在androidios 上运行的移动应用程序使用。它现在的工作方式是使用Basic AuthenticationSSL,它将usernamepassword 与每个请求一起发送到Web API。在调用action 之前,我在filter 中验证Web API 中的凭据。这很好用。问题是,用户登录后,我必须将密码存储在设备上(Android/iOS)以保存会话,否则他们将不得不一直登录。这不安全,因为如果设备被黑客入侵,则可以访问凭据。我正在寻找一种无需在设备上存储密码即可进行用户基本身份验证的方法。

我认为this 文章中的解决方案可以工作,但我不清楚如何使其工作。在接受的答案中它说

为您的每个应用生成一个密钥,并让它们在每个请求中将密钥作为令牌传递。然后,您的服务器可以验证密钥并验证请求。

查看 ASP.NET 站点中的 Basic Authentication 模块。该示例使用“基本”作为授权方案,但您可以改用“令牌”来更改它。

我不清楚这里的过程。在此示例中,即使在初始登录期间似乎也没有涉及任何用户名/密码。用户如何在不登录的情况下获取密钥?那么,引文中提到的“关键”究竟是什么。那可能是诸如Guid 之类的东西?如果被黑客入侵,我也不明白这比在设备上存储用户名和密码更安全。黑客可以使用“密钥”作为用户名和密码正确吗?

【问题讨论】:

【参考方案1】:

这是身份验证的基础知识,我将以简化的方式解释该过程。希望你能理解。

用户输入名称和密码,然后点击登录。 设备将名称和密码发送到服务器。 服务器进行身份验证并使用长的随机唯一字符序列(也称为密钥)进行响应。 设备和服务器都存储密钥。 所有其他请求都使用密钥进行身份验证。 对于每次调用,服务器都会检查密钥是否与它存储的密钥匹配。 设备从不存储用户名或密码。 如果怀疑违反,服务器可以禁用/删除该密钥,在这种情况下,用户将不得不重新登录

使用加密来完成所有这些操作。一切!

【讨论】:

缺少实现细节。 绝不是一个完整详细的“实现”。刚刚用用户名/密码/令牌解释了基础知识,以便 OP 可以理解。

以上是关于如何使用基本身份验证保护 android/ios 应用程序的 Web API的主要内容,如果未能解决你的问题,请参考以下文章

如何使用基本身份验证保护在 Apache2 虚拟主机中反向代理的 Tomcat webapp?

Spring boot 2.1.x 如何使用基本身份验证保护执行器端点

如何使用基于令牌的 HTTP 基本身份验证保护 MVC 4 .NET SPA 模板中的 WebAPI?

如何使用 OAuth2 保护 2 个 Spring Boot 微服务之间的通信?

我可以有两个 Spring Security 配置类:一个使用基本身份验证保护一些 API,另一个使用 JWT 令牌保护 API?

如何使用 Cloudfront 和基本身份验证?