面试题答案
一键面试1. 角色
- 资源拥有者:拥有受保护资源的用户,如微博用户。
- 客户端:第三方应用,例如某个需要获取微博用户信息的新闻应用。
- 授权服务器:负责验证资源拥有者身份并发放授权码和访问令牌,像微博的授权服务器。
- 资源服务器:存储受保护资源的服务器,如微博存储用户信息的服务器。
2. 具体流程及交互步骤
- 客户端请求授权
- 作用:客户端向授权服务器请求资源拥有者的授权。
- 请求URL示例:
https://authorization-server.com/authorize
- 涉及参数:
response_type
:值为code
,表示请求授权码。client_id
:客户端在授权服务器注册的唯一标识。redirect_uri
:授权服务器在用户授权后重定向到客户端的URI。scope
:请求的权限范围,如read:user
表示读取用户信息权限。
- 授权服务器验证并询问资源拥有者
- 作用:验证客户端请求合法性,并向资源拥有者展示授权页面。
- 涉及:展示给资源拥有者请求的权限范围等信息,询问是否授权给客户端。
- 资源拥有者授权
- 作用:资源拥有者同意授权给客户端。
- 涉及:资源拥有者点击授权按钮,向授权服务器表明授权意愿。
- 授权服务器发放授权码
- 作用:授权服务器生成授权码,并通过重定向发送给客户端。
- 重定向URL示例:
https://client.com/callback?code=AUTHORIZATION_CODE
- 涉及参数:
code
:授权码,客户端后续用于获取访问令牌。
- 客户端用授权码请求访问令牌
- 作用:客户端使用授权码向授权服务器请求访问令牌。
- 请求示例:一般为POST请求到
https://authorization-server.com/token
- 涉及参数:
grant_type
:值为authorization_code
,表示使用授权码模式。code
:上一步获得的授权码。redirect_uri
:与请求授权时的redirect_uri
一致。client_id
:客户端ID。client_secret
:客户端密钥,用于验证客户端身份。
- 授权服务器验证并发放访问令牌
- 作用:验证客户端请求的合法性,验证通过后发放访问令牌。
- 响应示例:
{
"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. 资源服务器验证并返回资源
- 作用:验证访问令牌的合法性,验证通过后返回受保护资源给客户端。
- 响应:返回如用户信息等受保护资源。