MST

星途 面试题库

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

请详细描述OAuth 2.0授权码模式(Authorization Code Grant)的具体流程,包括涉及的各个角色(如资源拥有者、客户端、授权服务器、资源服务器)之间的交互步骤,并说明每个步骤的作用和可能涉及的参数。
47.0万 热度难度
后端开发安全认证

知识考点

AI 面试

面试题答案

一键面试

1. 角色

  • 资源拥有者:拥有受保护资源的用户,如微博用户。
  • 客户端:第三方应用,例如某个需要获取微博用户信息的新闻应用。
  • 授权服务器:负责验证资源拥有者身份并发放授权码和访问令牌,像微博的授权服务器。
  • 资源服务器:存储受保护资源的服务器,如微博存储用户信息的服务器。

2. 具体流程及交互步骤

  1. 客户端请求授权
    • 作用:客户端向授权服务器请求资源拥有者的授权。
    • 请求URL示例https://authorization-server.com/authorize
    • 涉及参数
      • response_type:值为code,表示请求授权码。
      • client_id:客户端在授权服务器注册的唯一标识。
      • redirect_uri:授权服务器在用户授权后重定向到客户端的URI。
      • scope:请求的权限范围,如read:user表示读取用户信息权限。
  2. 授权服务器验证并询问资源拥有者
    • 作用:验证客户端请求合法性,并向资源拥有者展示授权页面。
    • 涉及:展示给资源拥有者请求的权限范围等信息,询问是否授权给客户端。
  3. 资源拥有者授权
    • 作用:资源拥有者同意授权给客户端。
    • 涉及:资源拥有者点击授权按钮,向授权服务器表明授权意愿。
  4. 授权服务器发放授权码
    • 作用:授权服务器生成授权码,并通过重定向发送给客户端。
    • 重定向URL示例https://client.com/callback?code=AUTHORIZATION_CODE
    • 涉及参数
      • code:授权码,客户端后续用于获取访问令牌。
  5. 客户端用授权码请求访问令牌
    • 作用:客户端使用授权码向授权服务器请求访问令牌。
    • 请求示例:一般为POST请求到https://authorization-server.com/token
    • 涉及参数
      • grant_type:值为authorization_code,表示使用授权码模式。
      • code:上一步获得的授权码。
      • redirect_uri:与请求授权时的redirect_uri一致。
      • client_id:客户端ID。
      • client_secret:客户端密钥,用于验证客户端身份。
  6. 授权服务器验证并发放访问令牌
    • 作用:验证客户端请求的合法性,验证通过后发放访问令牌。
    • 响应示例
{
    "access_token": "ACCESS_TOKEN",
    "token_type": "bearer",
    "expires_in": 3600,
    "refresh_token": "REFRESH_TOKEN"
}
- **涉及参数**:
  - `access_token`:访问令牌,用于访问资源服务器的受保护资源。
  - `token_type`:令牌类型,常见为`bearer`。
  - `expires_in`:访问令牌的过期时间(秒)。
  - `refresh_token`:刷新令牌,用于在访问令牌过期后获取新的访问令牌。

7. 客户端使用访问令牌访问资源 - 作用:客户端携带访问令牌向资源服务器请求受保护资源。 - 请求示例https://resource-server.com/api/user?access_token=ACCESS_TOKEN - 涉及参数access_token:访问令牌。 8. 资源服务器验证并返回资源 - 作用:验证访问令牌的合法性,验证通过后返回受保护资源给客户端。 - 响应:返回如用户信息等受保护资源。