API应该如何使用http基本身份验证


17

当API要求客户端对其进行身份验证时,我已经看到使用了两种不同的方案,并且我想知道哪种情况适合我的情况。

示例1.一个公司提供的API,允许第三方使用HTTP Basic使用令牌和机密进行身份验证。

示例2. API通过HTTP Basic接受用户名和密码来认证最终用户。通常,他们会获得令牌以供将来请求。

我的设置:我将有一个JSON API,它将用作移动和Web应用程序的后端。对于移动应用程序和Web应用程序来说,似乎都附带令牌和秘密发送的好习惯,因此只有这两个应用程序才能访问阻止任何其他第三方的API。

但是移动和Web应用程序允许用户登录和提交帖子,查看其数据等。因此,我希望他们也可以通过HTTP Basic在每次请求时登录。

我会以某种方式同时使用这两种方法还是仅在每个请求上发送最终用户凭据(用户名和令牌)?如果仅发送最终用户凭据,是否将它们存储在客户端的Cookie中?


请注意,Cookie不是HTTP协议的一部分,而仅仅是浏览器的常用功能。因此,如果您不打算为Web进行部署,请不要理会它们。
Yam Marcovic 2012年

如果不建议使用cookie,则如何/在何处存储凭据以传递给api?
Paul Sylling 2012年

Cookies只是浏览器用户无缝存储会话令牌的一种方式。如果您正在与开发人员进行交互,则不必是无缝的。您可以设置授予“票证”的公共连接服务,开发人员可以将其票证保留在内存中或任何需要的地方。请注意,我没有实际的Web服务经验,并且可能有针对此类内容的标准解决方案。
Yam Marcovic 2012年

您对最终用户身份验证和api身份验证的问题有何看法?我仍然不确定
Paul Sylling 2012年

Answers:


7

HTTP基本认证要求用户名和密码与每个资源请求一起发送。用户名:密码在“授权”请求标头base64编码的字符串中传递,前缀为“基本”。如果您所有的HTTP通信都已加密(通过ssl),那么攻击者就不能轻易使用Authorization标头中的信息,因为攻击者不太可能掌握这些信息。

具有基本身份验证的SSL加密的http应该足够。


2
你能提供一个例子吗?这就是我所需要的,只是现在非常卡住...
ganders 2014年

0

OAuth / OpenID可以与令牌/机密一起使用吗?

我最近考虑了以下情况:

  • Web应用程序前端
  • 底层REST API
  • 移动设备应用程序,访问REST API

作为一个简单的测试,我能够:

  • 使用OAuth通过Web应用程序对用户进行身份验证
  • 通过OAuth授权的REST API,导致生成秘密并将其传递回客户端
  • 然后,移动设备将通过OAuth进行身份验证,然后由REST API通过秘密授权

这将允许移动设备应用程序使用与通过Web前端(相同的帐户)相同的凭据进行身份验证,并且还能够授权对API的访问。


1
因此,在您的示例中,只有用户在进行身份验证。正在调用API的客户端(Web应用程序,移动应用程序)无法验证其身份。从理论上讲,该API是公开的,任何应用程序可以发布一个用户名和密码,并可能获得令牌回来
保罗Sylling

用户正在通过该应用进行身份验证,并且该应用正在代表该用户进行呼叫。身份验证过程将得出令牌,然后应用程序将其传递给令牌。
布伦丹·格林
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.