HTTP 基本身份验证与密钥

Dav*_*son 5 php authentication http-authentication basic-authentication api-key

在构建了一个相当简单的 API 后,我开始研究身份验证,其中仅使用用户名/密码组合的基于 SSL 的基本 HTTP 身份验证对于使用它的人来说可能显得很弱,尽管这里的各种讨论表明它应该没问题。

在这种情况下,我从类似的解决方案中研究了 API,这些解决方案为用户提供了用户 ID 和 API 密钥。问题是我根本不明白这有多强。我认为密钥仍然像密码一样保存,从我的角度来看,他们只是将密码称为密钥。

例子:

https://github.com/Arie/serveme/blob/master/spec/fixtures/vcr/HiperzServer/_restart/visits_the_Hiperz_restart_URL.yml

&api_key=hiperz_api_key&gs_id=3873除了用户名密码之外,args如何提供进一步的安全性?我肯定想实现一些比基本 HTTP 身份验证上的用户/传递更强大的东西,并为最终用户提供某种类型的令牌/密钥用于访问,但我没有看到这种方法的额外优势。

Mvd*_*vdD 0

正如我在此处的回答中尝试解释的那样,不建议使用基本身份验证来保护 API 。

您是对的,使用客户端 ID 和客户端密钥与用户名和密码身份验证非常相似。不同之处在于,在后一种情况下,您对用户(一个人)进行身份验证,而在前一种情况下,您对客户端(应用程序)进行身份验证。

您是否希望使用客户端 ID 和机密来保护您的 API 取决于您是否可以信任客户端会保守它们的机密。

无论哪种方式,无论您有一个受信任的客户端,如 Web 应用程序(位于安全服务器上),还是不受信任的客户端,如 JavaScript 应用程序或移动应用程序(位于用户领域),基于令牌的身份验证方案(如OAuth2)都提供了一种比基本身份验证更安全的方式来保护您的 API。有关使用 OAuth 2.0 获取令牌的不同方法的更多信息,请参阅我的答案。