面试题答案
一键面试- 用户请求授权:
- 主要交互信息:用户在客户端应用(如移动应用、网页应用)发起操作,客户端应用将用户重定向到授权服务器的授权端点。重定向URL中包含客户端ID(标识客户端应用)、响应类型(授权码模式下为“code”)、重定向URI(授权服务器授权成功后回调客户端应用的URI)、范围(请求的权限范围,如读取用户信息、发布推文等)。例如:
https://authorization-server.com/authorize?client_id=client1&response_type=code&redirect_uri=https%3A%2F%2Fclient-app.com%2Fcallback&scope=read%20write
- 主要交互信息:用户在客户端应用(如移动应用、网页应用)发起操作,客户端应用将用户重定向到授权服务器的授权端点。重定向URL中包含客户端ID(标识客户端应用)、响应类型(授权码模式下为“code”)、重定向URI(授权服务器授权成功后回调客户端应用的URI)、范围(请求的权限范围,如读取用户信息、发布推文等)。例如:
- 授权服务器验证并询问用户授权:
- 主要交互信息:授权服务器验证客户端ID的合法性以及重定向URI是否与注册信息匹配。若验证通过,向用户展示授权页面,询问用户是否授权客户端应用访问所请求的范围。用户看到的信息包括客户端应用名称、请求的权限范围等。
- 用户授权:
- 主要交互信息:用户在授权页面选择授权或拒绝。若用户授权,授权服务器生成授权码,并将用户重定向到客户端应用的重定向URI,同时在重定向URI的查询参数中带上授权码。例如:
https://client - app.com/callback?code=AUTHORIZATION_CODE
- 主要交互信息:用户在授权页面选择授权或拒绝。若用户授权,授权服务器生成授权码,并将用户重定向到客户端应用的重定向URI,同时在重定向URI的查询参数中带上授权码。例如:
- 客户端应用请求令牌:
- 主要交互信息:客户端应用在收到包含授权码的重定向后,使用授权码、客户端ID、客户端密钥(用于验证客户端应用身份)向授权服务器的令牌端点发送请求以获取访问令牌。请求通常使用POST方法,请求体包含授权码、客户端ID、客户端密钥、grant_type(“authorization_code”)和重定向URI。例如:
{ "code": "AUTHORIZATION_CODE", "client_id": "client1", "client_secret": "CLIENT_SECRET", "grant_type": "authorization_code", "redirect_uri": "https://client - app.com/callback" }
- 授权服务器验证并颁发令牌:
- 主要交互信息:授权服务器验证授权码的有效性、客户端ID和客户端密钥的正确性以及重定向URI是否匹配。若验证通过,生成访问令牌(用于访问受保护资源)、刷新令牌(用于在访问令牌过期时获取新的访问令牌),并将它们返回给客户端应用。响应通常为JSON格式,例如:
{ "access_token": "ACCESS_TOKEN_VALUE", "token_type": "Bearer", "expires_in": 3600, "refresh_token": "REFRESH_TOKEN_VALUE" }
- 客户端应用使用令牌访问资源:
- 主要交互信息:客户端应用在后续对受保护资源(如用户的个人信息API)的请求中,将访问令牌放在请求头中(格式为
Authorization: Bearer ACCESS_TOKEN_VALUE
)发送给资源服务器。资源服务器验证访问令牌的有效性,若有效则返回请求的资源数据。
- 主要交互信息:客户端应用在后续对受保护资源(如用户的个人信息API)的请求中,将访问令牌放在请求头中(格式为