【问题标题】:RESTful best practice for authenticationRESTful 身份验证最佳实践
【发布时间】:2014-06-23 17:28:38
【问题描述】:

感谢大家查看这个问题。

我不确定如何做到这一点,所以我在这件事上寻求社区帮助。 我在他的帖子Can you help me understand this? "Common REST Mistakes: Sessions are irrelevant" 中读到,会话没有“完全”按照 REST 约定进行建议,并且所有身份验证都应使用 HTTP 基本身份验证或摘要进行。

好的,到目前为止我明白了。
但是我知道,基本身份验证是在实际服务器上针对常规非加密文本文件进行的。 是否违反约定,将用户名/密码放在 http 请求参数中,而不是通过标头传递它们并让 Web 服务器进行身份验证?

这样,对于发出的每个请求,都会使用我自己的逻辑检查和管理用户/传递参数。我的意思是使用数据库表,其中包含应用程序所需的所有信息。

【问题讨论】:

    标签: http rest http-headers restful-authentication basic-authentication


    【解决方案1】:

    我目前使用的方法是第一个请求是通过 POST 方法请求身份验证令牌,其中包含用户名和密码的标头,然后根据我的身份验证方法进行验证。如果凭据有效,我会返回一个限时令牌。所有后续请求都必须将身份验证令牌作为标头,检查是否允许有效访问。我在代码中维护有效令牌列表并根据需要使它们过期。这比必须在每次调用时验证用户名和密码要快,并且比每次调用传入的用户名和密码稍微安全一些,因为令牌可能会被盗,但它仅在一小段时间内有效。

    所有这些都必须在 SSL 下运行,否则数据不安全并且可以读取用户凭据。

    【讨论】:

      【解决方案2】:

      基本身份验证由服务器处理,但服务器选择处理它。当然不必是包含用户名和密码的纯文本文件!我当前的客户在他们的数据库中以单向加盐哈希存储密码。在收到请求时,从标头中提取明文密码、加盐、散列,然后将它们与数据库值进行比较。

      在请求参数中输入密码是一个非常糟糕的主意。当用户复制并粘贴 URL 以通过电子邮件发送给同事时会发生什么?

      【讨论】:

        猜你喜欢
        • 2014-01-23
        • 2013-01-17
        • 1970-01-01
        • 1970-01-01
        • 2012-08-26
        • 2011-08-17
        • 2010-09-14
        • 1970-01-01
        • 2010-09-22
        相关资源
        最近更新 更多