MST

星途 面试题库

面试题:安全认证之中等难度:OAuth 2.0 授权码模式流程

请详细描述OAuth 2.0授权码模式(Authorization Code Grant)的完整流程,包括涉及的角色、每个步骤的具体交互以及相关参数的含义。
45.3万 热度难度
后端开发安全认证

知识考点

AI 面试

面试题答案

一键面试

涉及角色

  1. 资源所有者(Resource Owner):通常是用户,拥有受保护的资源。
  2. 客户端(Client):想要访问资源所有者资源的应用程序。
  3. 授权服务器(Authorization Server):负责验证资源所有者的身份,并颁发授权码和访问令牌。
  4. 资源服务器(Resource Server):托管受保护资源的服务器,使用访问令牌来验证请求并提供资源。

完整流程及具体交互

  1. 客户端请求授权
    • 交互:客户端将用户重定向到授权服务器的授权端点。
    • 相关参数
      • response_type:必须设置为code,表示请求授权码。
      • client_id:客户端在授权服务器注册的唯一标识符。
      • redirect_uri:授权服务器在授权成功后重定向回客户端的URI,必须与在授权服务器注册的回调URI一致。
      • scope:请求的权限范围,以空格分隔的字符串,例如read write
  2. 资源所有者授权
    • 交互:授权服务器验证资源所有者的身份,并提示用户授权客户端访问其资源。
    • 相关参数:无新参数。用户决定是否授权客户端访问其资源。
  3. 授权服务器颁发授权码
    • 交互:如果资源所有者授权,授权服务器将用户重定向回客户端指定的redirect_uri,并在URL中包含授权码。
    • 相关参数
      • code:授权码,是一个短期有效的代码,客户端将使用它来换取访问令牌。
  4. 客户端请求访问令牌
    • 交互:客户端使用授权码向授权服务器的令牌端点发送POST请求,以换取访问令牌。
    • 相关参数
      • grant_type:必须设置为authorization_code,表示使用授权码模式。
      • code:之前获得的授权码。
      • redirect_uri:与请求授权码时的redirect_uri一致。
      • client_id:客户端的唯一标识符。
      • client_secret:客户端的密钥,用于验证客户端身份(仅当客户端为保密客户端时需要)。
  5. 授权服务器验证并颁发访问令牌
    • 交互:授权服务器验证授权码和其他参数的有效性。如果验证通过,它将颁发访问令牌和可选的刷新令牌。
    • 相关参数
      • access_token:用于访问受保护资源的令牌。
      • token_type:令牌类型,如Bearer
      • expires_in:访问令牌的过期时间,以秒为单位。
      • refresh_token(可选):用于获取新的访问令牌,当访问令牌过期时使用。
  6. 客户端使用访问令牌访问资源
    • 交互:客户端将访问令牌包含在对资源服务器的请求中,以访问受保护的资源。
    • 相关参数
      • 在请求的Authorization头中设置Bearer <access_token>,表示使用Bearer令牌进行身份验证。

总结

OAuth 2.0授权码模式通过多个步骤和角色之间的交互,实现了客户端安全地获取访问令牌以访问资源所有者的资源,同时保护了用户的隐私和资源的安全性。