提问者:小点点

为什么授权代码流中需要身份验证代码?


我对授权码流感到不清楚。隐式流和授权码流的主要区别在于授权码流验证客户端(使用id和秘密)。首先,我定义了授权码流的步骤,并提出了我的疑问。

授权代码流转步骤(部分跳过)

>

  • 授权码请求发送到授权服务器,然后用户重定向到登录页面

       request contains
    
        - response_type=auth code
        - scope
        - state 
        - redirect_uri
        - client-id
    

    如果用户凭证正确,则身份验证服务器使用身份验证代码和状态重定向url

    客户端向授权服务器发送访问令牌的发布请求

        request contains
    
           - grant type
           - code (auth code)
           - redirect_uri
           - client_id
           - client_secret
    
     once auth server validated above request we get access token as reponse
    

    使用访问令牌客户端将访问资源服务器

    我的问题是为什么我们在第三步而不是第一步发送客户端机密。如果我们在第一步发送客户端ID和客户端机密,并将用户重定向到登录页面,这样登录后客户端就可以直接获得访问令牌,为什么需要与身份验证代码相关的步骤。

    我如何期望上述步骤是

    >

  • 用户单击链接,以便请求发送到身份验证服务器。它验证客户端ID和秘密是否有效,然后用户将被重定向到登录页面

     request contains
       - response_type: access token
       - scope
       - state 
       - redirect_uri
       - client-id
       - client-secret
    

    如果用户凭据正确,则身份验证服务器使用访问令牌和状态重定向url

    使用访问令牌客户端将访问资源服务器

    客户端身份验证可以在第一步完成,为什么我们需要在第三步通过发送客户端秘密来拖动它。为什么我们需要与身份验证代码相关的步骤,这很混乱,有人能解释一下与身份验证代码相关的步骤的目的吗?


  • 共1个答案

    匿名用户

    因为授权服务器(可能是Google)发送到浏览器的任何内容都会记录到浏览器中。“身份验证代码”非常短暂(不超过1小时)。访问令牌是长期存在的,因此如果授权服务器在第一步中将访问令牌发送到浏览器,它将被记录到浏览器中,因此如果它通过日志被泄露,其他人将代表您访问该应用程序。