Oauth 2.0 OAuth2如何使用安全令牌防止重播攻击?

Oauth 2.0 OAuth2如何使用安全令牌防止重播攻击?,oauth-2.0,Oauth 2.0,据我所知,OAuth 2中发生了以下事件链,以便Site-A从Site-B访问用户的信息 Site-A在Site-B上注册,并获得一个秘密和一个ID 当User告诉Site-A访问Site-B时,User被发送到Site-B,在那里他们告诉Site-B,他们确实想给Site-A特定信息的权限 Site-B将用户重定向回Site-A,并附上授权码 Site-A然后将该授权码及其秘密传递回Site-B,以换取安全令牌 Site-A然后通过将安全令牌与请求捆绑在一起,代表用户向Site-B发出请求 所

据我所知,OAuth 2中发生了以下事件链,以便
Site-A
Site-B
访问用户的信息

  • Site-A
    Site-B
    上注册,并获得一个秘密和一个ID
  • User告诉
    Site-A
    访问
    Site-B
    时,User被发送到
    Site-B
    ,在那里他们告诉
    Site-B
    ,他们确实想给
    Site-A
    特定信息的权限
  • Site-B
    用户重定向回
    Site-A
    ,并附上授权码
  • Site-A
    然后将该授权码及其秘密传递回
    Site-B
    ,以换取安全令牌
  • Site-A
    然后通过将安全令牌与请求捆绑在一起,代表用户向
    Site-B
    发出请求

  • 所有这些在安全性和加密方面是如何工作的?OAuth 2如何使用安全令牌防止重播攻击?

    根据我所读的内容,这就是它的工作原理:

    问题中概述的一般流程是正确的。在步骤2中,对用户X进行身份验证,并授权站点A访问站点B上用户X的信息。在步骤4中,站点将其机密传递回站点B,对其自身以及授权码进行身份验证,以指示其请求的内容(用户X的访问令牌)

    总的来说,OAuth2实际上是一个非常简单的安全模型,加密从未直接发挥作用。相反,机密和安全令牌本质上都是密码,整个过程只通过https连接的安全性来保护

    OAuth 2没有针对安全令牌或机密的重播攻击的保护。相反,它完全依赖于站点B负责这些项目,不让它们出去,并且在传输过程中通过https发送这些项目(https将保护URL参数)


    授权代码步骤的目的只是为了方便,授权代码本身并不特别敏感。当向站点B请求用户X的访问令牌时,它为站点a的用户X的访问令牌提供公共标识符。仅仅是用户X在站点B上的用户id是不起作用的,因为可能有许多未完成的访问令牌等待同时分发到不同的站点。

    另一个答案非常详细,解决了OP提出的大部分问题

    为了详细说明,特别是为了解决OP提出的“OAuth 2如何防止使用安全令牌的重播攻击?”的问题,在实施OAuth 2的官方建议中有两个额外的保护:

    1) 代币通常会有一个很短的到期期限():

    令牌的短到期时间是一种防止 以下威胁:

    • 重播
    2) 当站点A使用令牌时,建议不要将其显示为URL参数,而是显示在授权请求标头字段()中:

    客户端应使用承载令牌发出经过身份验证的请求 “Authorization”请求头字段带有“Bearer”HTTP 授权方案。

    不应使用“application/x-www-form-urlencoded”方法 除非在参与浏览器不参与的应用程序上下文中 可以访问“授权”请求标题字段。

    URI查询参数。。。包括以记录当前使用情况;它的用途并不简单 由于其安全缺陷,建议使用


    OAuth是一种协议,通过该协议,三方应用程序可以访问存储在另一个网站中的数据,而无需您的帐户和密码。有关更正式的定义,请参阅Wiki或规范

    下面是一个用例演示:

  • 我登录到LinkedIn,想与Gmail联系人中的一些朋友建立联系。LinkedIn支持这一点。它将从gmail请求一个安全的资源(我的gmail联系人列表)。所以我点击这个按钮:

  • 当我输入帐户和密码时,会弹出一个网页,显示Gmail登录页面:

  • 然后Gmail会显示一个同意页面,我点击“接受”:

  • 现在LinkedIn可以在Gmail中访问我的联系人:

  • 下面是上述示例的流程图:

    第1步:LinkedIn从Gmail的授权服务器请求令牌

    步骤2:Gmail授权服务器验证资源所有者,并向用户显示同意页面。(如果用户尚未登录,则需要登录Gmail)

    第三步:用户批准LinkedIn访问Gmail数据的请求

    步骤4:Gmail授权服务器用访问令牌进行响应

    第5步:LinkedIn使用此访问令牌调用Gmail API

    步骤6:如果访问令牌有效,Gmail资源服务器将返回您的联系人。(令牌将由Gmail资源服务器验证)


    您可以从OAuth的详细信息中获得更多信息。

    OAuth 2.0在现实生活中的工作原理:

    我在上班的路上开车经过奥拉夫面包店,突然看到橱窗里有最美味的甜甜圈——我的意思是,那东西正滴着巧克力糖。于是我走了进去,要求“我一定要吃那个油炸圈饼!”。他说:“当然是30美元。”

    是的,我知道,一个油炸圈饼30美元!一定很好吃!我伸手去拿钱包,突然听到厨师喊道:“不!你不要甜甜圈。”。我问:为什么?他说他只接受银行转账

    真的吗?是的,他是认真的。我差点就走开了,但是甜甜圈对我喊道:“吃了我,我很好吃……”。我是谁,不服从甜甜圈的命令?我说可以

         +--------+                               +---------------+
         |        |--(A)- Authorization Request ->|   Resource    |
         |        |                               |     Owner     |
         |        |<-(B)-- Authorization Grant ---|               |
         |        |                               +---------------+
         |        |
         |        |                               +---------------+
         |        |--(C)-- Authorization Grant -->| Authorization |
         | Client |                               |     Server    |
         |        |<-(D)----- Access Token -------|               |
         |        |                               +---------------+
         |        |
         |        |                               +---------------+
         |        |--(E)----- Access Token ------>|    Resource   |
         |        |                               |     Server    |
         |        |<-(F)--- Protected Resource ---|               |
         +--------+                               +---------------+