面试题答案
一键面试OAuth授权码模式的完整流程涉及以下几个角色:资源所有者(Resource Owner)、客户端(Client)、授权服务器(Authorization Server)和资源服务器(Resource Server)。以下是详细的交互步骤及每个步骤中传递的关键参数:
-
客户端请求授权
- 发起请求:客户端向授权服务器发起授权请求,引导资源所有者进行授权。
- 请求地址:通常是授权服务器的授权端点(Authorization Endpoint)。
- 关键参数:
response_type
:设置为code
,表示使用授权码模式。client_id
:客户端在授权服务器注册的唯一标识。redirect_uri
:授权服务器在授权成功后重定向回客户端的URI。scope
:请求的权限范围,例如read
、write
等。
-
授权服务器展示授权页面
- 展示页面:授权服务器接收到请求后,向资源所有者展示授权页面,询问是否授权客户端访问其资源。
-
资源所有者授权
- 授权操作:资源所有者决定是否授权客户端访问其资源。如果授权,授权服务器继续下一步;如果拒绝,授权服务器返回错误信息给客户端。
-
授权服务器颁发授权码
- 颁发授权码:授权服务器生成一个授权码(Authorization Code),并将其通过
redirect_uri
重定向回客户端。 - 重定向地址:
redirect_uri
。 - 关键参数:
code
:授权码。
- 颁发授权码:授权服务器生成一个授权码(Authorization Code),并将其通过
-
客户端请求访问令牌
- 发起请求:客户端接收到授权码后,使用该授权码向授权服务器的令牌端点(Token Endpoint)请求访问令牌(Access Token)。
- 请求方式:通常为POST请求。
- 关键参数:
grant_type
:设置为authorization_code
,表示使用授权码模式获取令牌。code
:之前获取的授权码。redirect_uri
:与之前请求授权时一致的重定向URI。client_id
:客户端ID。client_secret
:客户端在授权服务器注册的密钥(如果客户端为保密客户端)。
-
授权服务器验证并颁发访问令牌
- 验证与颁发:授权服务器验证客户端提交的参数,包括授权码的有效性、
redirect_uri
的一致性等。验证通过后,生成访问令牌(Access Token)和刷新令牌(Refresh Token,可选),并返回给客户端。 - 响应参数:
access_token
:访问令牌,用于访问资源服务器的资源。token_type
:令牌类型,如Bearer
。expires_in
:访问令牌的过期时间(以秒为单位)。refresh_token
:刷新令牌(如果颁发),用于在访问令牌过期时获取新的访问令牌。
- 验证与颁发:授权服务器验证客户端提交的参数,包括授权码的有效性、
-
客户端使用访问令牌访问资源
- 发起请求:客户端使用获取到的访问令牌向资源服务器发起资源访问请求。
- 请求头:在请求头中添加
Authorization: Bearer <access_token>
。 - 资源服务器验证:资源服务器验证访问令牌的有效性。如果有效,返回请求的资源;如果无效,返回错误信息。