HTTP 基本身份验证与密钥

HTTP Basic Authentication vs Secret Key

在构建了一个相当简单的 API 之后,我开始研究身份验证,其中仅使用 username/password 组合的基于 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 参数如何提供比用户名密码更进一步的安全性?我绝对想通过基本 HTTP 身份验证实现比 user/pass 更强大的东西,并为最终用户提供某种类型的 token/key 用于访问,但我没有看到这种方法的额外优势.

我现在也在学习 API。我的理解是,通过使用 API 密钥,您可以更好地控制用户拥有的权限。 API 键也可以随时重新调用。此外,它还可以节省客户在每次使用 API 时输入登录详细信息的时间。我不确定这是否回答了您的问题。

好吧,总有两步验证可以完成(通过向他们的 phone 发送消息......或者给每个用户一个随机生成的代码来填写)。此外,您可以创建自己的加密机制并将其添加到网页的功能中。例如,您可以使用自己制作的加密密钥加密数据,然后当它到达您想要的位置时,您只知道密钥,因此您可以解密它。

Basic authentication is not recommended to protect APIs as I tried to explain in my answer here.

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

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

无论哪种方式,无论您有一个受信任的客户端,如 Web 应用程序(位于安全服务器上)还是不受信任的客户端,如 JavaScript 应用程序或移动应用程序(位于用户领域),令牌基于身份验证方案(如 OAuth2) provide a more secure way to protect your API than basic authentication. See 以获取有关使用 OAuth 2.0

获取令牌的不同方式的更多信息