通过SSL实现REST API的HTTP基本身份验证

45

我对RESTful API的概念还很陌生。

我正在为一个在线商店设计RESTful API。

我尚未完全理解基本HTTP身份验证在SSL上的概念。

这是否意味着每个请求用户都必须再次输入他/她的用户名和密码?

有人能详细解释一下它的功能和如何使用吗?

1个回答

71

基本认证是一个标准的HTTP头,其中用户和密码以base64编码方式编码:

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

(http://en.wikipedia.org/wiki/Basic_access_authentication) .如果您通过此头验证rest API调用的身份,并使用非SSL连接,则问题在于中间人可以从您的授权头解码您的用户名和密码。

为确保您的密码被安全发送,您必须使用HTTPS而不是普通的HTTP连接。HTTP和HTTPS之间唯一的区别是HTTPS使用SSL / TLS安全协议覆盖TCP / IP,而不是纯TCP / IP。

现在这有一个缺点,建立HTTPS连接比普通的HTTP连接更花费CPU资源。

很明显,如果您想在每个请求中使用此头进行身份验证,则应该将rest API限制为仅通过HTTPS连接提供。


1
每个发送到服务器的请求都必须携带授权头吗? - Kanishk Dudeja
4
是的。因为 Rest API 没有状态(例如:已登录用户的状态)。我认为,对于大型应用程序,您需要拥有一个具有状态的身份验证模块或过滤器,或者类似 OAuth 的东西。我肯定还会尝试了解 OAuth 2,例如,它是一个更完整和通用的解决方案,适用于使用您的 API 的任何人。 - Ovidiu Buligan
我的浏览器会自动缓存并再次发送头信息吗?还是我需要通过 API 代码发送头信息? - Kanishk Dudeja
请忽略我的预览评论,似乎浏览器缓存了凭据。这是关于同一主题的问题:http://security.stackexchange.com/questions/988/is-basic-auth-secure-if-done-over-https - Ovidiu Buligan
是的,通常您不需要担心编码问题,因为您可以使用JavaScript API来设置基本身份验证的用户名和密码。 - Ovidiu Buligan
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接