面试题答案
一键面试涉及角色
- 资源所有者(Resource Owner):通常是用户,拥有受保护的资源。
- 客户端(Client):想要访问资源所有者资源的应用程序。
- 授权服务器(Authorization Server):负责验证资源所有者的身份,并颁发授权码和访问令牌。
- 资源服务器(Resource Server):托管受保护资源的服务器,使用访问令牌来验证请求并提供资源。
完整流程及具体交互
- 客户端请求授权
- 交互:客户端将用户重定向到授权服务器的授权端点。
- 相关参数:
response_type
:必须设置为code
,表示请求授权码。client_id
:客户端在授权服务器注册的唯一标识符。redirect_uri
:授权服务器在授权成功后重定向回客户端的URI,必须与在授权服务器注册的回调URI一致。scope
:请求的权限范围,以空格分隔的字符串,例如read write
。
- 资源所有者授权
- 交互:授权服务器验证资源所有者的身份,并提示用户授权客户端访问其资源。
- 相关参数:无新参数。用户决定是否授权客户端访问其资源。
- 授权服务器颁发授权码
- 交互:如果资源所有者授权,授权服务器将用户重定向回客户端指定的
redirect_uri
,并在URL中包含授权码。 - 相关参数:
code
:授权码,是一个短期有效的代码,客户端将使用它来换取访问令牌。
- 交互:如果资源所有者授权,授权服务器将用户重定向回客户端指定的
- 客户端请求访问令牌
- 交互:客户端使用授权码向授权服务器的令牌端点发送POST请求,以换取访问令牌。
- 相关参数:
grant_type
:必须设置为authorization_code
,表示使用授权码模式。code
:之前获得的授权码。redirect_uri
:与请求授权码时的redirect_uri
一致。client_id
:客户端的唯一标识符。client_secret
:客户端的密钥,用于验证客户端身份(仅当客户端为保密客户端时需要)。
- 授权服务器验证并颁发访问令牌
- 交互:授权服务器验证授权码和其他参数的有效性。如果验证通过,它将颁发访问令牌和可选的刷新令牌。
- 相关参数:
access_token
:用于访问受保护资源的令牌。token_type
:令牌类型,如Bearer
。expires_in
:访问令牌的过期时间,以秒为单位。refresh_token
(可选):用于获取新的访问令牌,当访问令牌过期时使用。
- 客户端使用访问令牌访问资源
- 交互:客户端将访问令牌包含在对资源服务器的请求中,以访问受保护的资源。
- 相关参数:
- 在请求的
Authorization
头中设置Bearer <access_token>
,表示使用Bearer令牌进行身份验证。
- 在请求的
总结
OAuth 2.0授权码模式通过多个步骤和角色之间的交互,实现了客户端安全地获取访问令牌以访问资源所有者的资源,同时保护了用户的隐私和资源的安全性。