【问题标题】:HTTP basic authentication over SSL for REST API针对 REST API 的基于 SSL 的 HTTP 基本身份验证
【发布时间】:2013-10-20 09:36:35
【问题描述】:

我不熟悉 RESTful API 的概念。

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

我还没有正确理解基于 SSL 的基本 HTTP 身份验证的概念。

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

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

【问题讨论】:

    标签: http authentication ssl rest


    【解决方案1】:

    基本身份验证只是用户的标准 HTTP 标头,并以 base64 编码传递:

    授权:基本 QWxhZGRpbjpvcGVuIHNlc2FtZQ==

    (http://en.wikipedia.org/wiki/Basic_access_authentication) 。如果您通过非 ssl 连接通过此标头验证您的 REST API 调用,问题是中间的任何人都可以从您的身份验证标头中解码您的用户名和密码。

    为确保您的密码安全发送,您必须使用 HTTPS 而不是正常的 HTTP 连接。 HTTP 和 HTTPS 之间的唯一区别是 HTTPS 在 TCP/IP 上使用 SSL/TSL 安全协议,而不是普通的 TCP/IP。

    现在这有一个缺点,即在 CPU 上建立 HTTPS 连接比普通 HTTP 连接更昂贵。 很明显,如果您想使用此标头对每个请求的 REST 调用进行身份验证,您应该使您的 REST API 仅可用于 HTTPS 连接。

    【讨论】:

    • 授权标头是否必须与发送到服务器的每个请求一起发送?
    • 是的。因为 Rest api 没有状态(例如:登录用户状态)。我认为对于大型应用程序,您必须有一个具有状态的身份验证模块或过滤器。或类似 OAuth 的东西。例如,我当然也会尝试理解 OAuth 2,这对于使用您的 api 的任何人来说都是一个更完整和通用的解决方案。
    • 我的浏览器会自动缓存和发送标头吗?还是我需要通过 api 代码发送标头?
    • 您需要在每个请求中发送标头
    • 忽略我的预览评论,它使浏览器缓存凭据。这是一个关于同一主题的问题:security.stackexchange.com/questions/988/…
    猜你喜欢
    • 2012-07-19
    • 2012-02-13
    • 1970-01-01
    • 2017-11-27
    • 1970-01-01
    • 2014-05-15
    • 2011-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多