【问题标题】:REST api authentication mechanismREST api 认证机制
【发布时间】:2013-09-28 17:53:54
【问题描述】:

我正在使用自定义协议来保护我的 REST API - 将一堆唯一数据(包括用户的令牌)散列在一起,并将其作为 Authorization 标头发送(非常类似于AWS rest api)。

目前,我让用户发送它是 un\pw 以便为所有未来的调用获取令牌:

POST http://xxxx/token
Body: {"username" : "Bob", "password":"foo"}

我的问题是我应该如何保护生成用户令牌的初始登录调用?现在的情况够好吗?

【问题讨论】:

    标签: web-services security rest restful-authentication


    【解决方案1】:

    您不妨使用 OAuth2,因为这本质上就是您要实现的。请参阅“4.3. 资源所有者密码凭证授予”:https://www.rfc-editor.org/rfc/rfc6749#section-4.3

    在 OAuth2 中,请求是这样的(来自 RFC 的示例):

     POST /token HTTP/1.1
     Host: server.example.com
     Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
     Content-Type: application/x-www-form-urlencoded
    
     grant_type=password&username=johndoe&password=A3ddj3w
    

    用于授权客户端应用程序的“Authorization”标头,正文中的用户名/密码是您用户的凭据。

    下面是对应的回复:

     HTTP/1.1 200 OK
     Content-Type: application/json;charset=UTF-8
     Cache-Control: no-store
     Pragma: no-cache
    
     {
       "access_token":"2YotnFZFEjr1zCsicMWpAA",
       "token_type":"example",
       "expires_in":3600,
       "refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA",
       "example_parameter":"example_value"
     }
    

    OAuth2 需要 TLS/SSL 以确保安全(例如 brazo 也可以回答)。

    【讨论】:

      【解决方案2】:

      您的解决方案看起来像是对在 POST 正文中具有用户名和密码的 j_security_servlet 的调用。 您可以在此处找到有关 servlet 的更多信息: http://docs.oracle.com/javaee/1.4/tutorial/doc/Security5.html

      您可能希望选择 TLS 安全连接来加密您发送过来的用户名/密码。 但您可能需要考虑将 HTTP 基本身份验证与 TLS 或其他一些经过验证的技术结合使用,而不是设计自己的技术。

      顺便说一句。我的答案是使用 SSL/TLS。

      【讨论】:

        猜你喜欢
        • 2016-06-09
        • 1970-01-01
        • 1970-01-01
        • 2014-05-31
        • 2013-02-25
        • 2017-05-31
        • 2019-12-20
        • 2015-10-18
        • 2016-06-13
        相关资源
        最近更新 更多