面试题答案
一键面试1. 主要角色
- 资源所有者:拥有受保护资源的用户。
- 客户端:想要访问资源所有者受保护资源的应用程序。
- 授权服务器:负责验证资源所有者身份,并发放授权码和访问令牌。
- 资源服务器:托管受保护资源的服务器,通过验证访问令牌来决定是否允许客户端访问资源。
2. 核心流程及交互步骤
- 客户端请求授权:
- 客户端将资源所有者重定向到授权服务器的授权端点。请求中包含客户端ID、重定向URI、响应类型(这里是
code
,表示授权码模式)、范围(请求访问的资源范围)等参数。
https://authorization-server.com/authorize?response_type=code&client_id=CLIENT_ID&redirect_uri=REDIRECT_URI&scope=SCOPE
- 客户端将资源所有者重定向到授权服务器的授权端点。请求中包含客户端ID、重定向URI、响应类型(这里是
- 授权服务器验证并请求授权:
- 授权服务器对客户端进行验证,确保客户端是合法注册的。
- 然后向资源所有者展示授权页面,询问是否授权客户端访问其受保护资源。
- 资源所有者授权:
- 资源所有者决定是否授权客户端访问其资源。如果授权,授权服务器将生成一个授权码,并将资源所有者重定向回客户端指定的重定向URI,同时在URI中包含授权码。
https://client.com/callback?code=AUTHORIZATION_CODE
- 客户端请求访问令牌:
- 客户端接收到授权码后,使用该授权码向授权服务器的令牌端点发送请求以获取访问令牌。请求中包含授权码、客户端ID、客户端密钥(用于证明客户端身份)、重定向URI等参数。
POST https://authorization-server.com/token grant_type=authorization_code&code=AUTHORIZATION_CODE&client_id=CLIENT_ID&client_secret=CLIENT_SECRET&redirect_uri=REDIRECT_URI
- 授权服务器发放访问令牌:
- 授权服务器验证请求中的授权码、客户端ID和客户端密钥等信息。如果验证通过,将生成访问令牌(可能还包括刷新令牌),并返回给客户端。
{ "access_token": "ACCESS_TOKEN", "token_type": "Bearer", "expires_in": 3600, "refresh_token": "REFRESH_TOKEN" }
- 客户端访问资源:
- 客户端使用获取到的访问令牌向资源服务器发起请求访问受保护资源。请求中在
Authorization
头字段带上访问令牌。
GET https://resource-server.com/protected-resource Authorization: Bearer ACCESS_TOKEN
- 客户端使用获取到的访问令牌向资源服务器发起请求访问受保护资源。请求中在
- 资源服务器验证并响应:
- 资源服务器验证访问令牌的有效性。如果有效,返回受保护资源给客户端;如果无效,返回错误信息。