跳到主要内容

08、OAuth 2.0 授权码授权

授权码授权总共由2个请求和2个响应组成。一个授权请求+响应,和一个令牌请求+响应。 授权请求 授权请求被发送到授权端点以获取一个授权码。这是请求中用到的参数:

response_type 必须。必须被设置到代码里
client_id 必须。当客户端被注册时,授权服务器要标识的客户端。
redirect_uri 可选。通过客户端注册的重定向URI。
scope 可选。请求可能的作用域。
state 可选(推荐的)。任何需要被传递到客户端请求的URI客户端的状态。

授权响应 授权响应包含了需要用来获取访问令牌的授权码。这是响应包括的参数:

code 必须。授权码
state 如果出现在请求中,必须包含。如果有的话,和客户端请求中发送的state参数一样。

授权错误

如果授权期间发生错误,两种情况会发生。 第一种情形是,客户端没有被授权或识别。比如,请求中错误的重定向URI。这种情况下,授权服务器没有必要重定向资源拥有者到重定向URI,而是通知资源拥有者发生了错误。 第二种情形是,客户端被正确地授权了,但是其他某些事情失败了。这种情况下下面地错误响应会被发送到客户端,包括在重定向URI中:

error 必须。必须是预先定义的错误码之一。参见规范查查这些错误码及它们的含义。
error_description 可选。一段UTF-8编码的描述错误的文本。适用于开发者,而不是最终用户。
error_uri 可选。 一个指向包含人类可读的错误信息网页的URI。
state 必须。如果出现在授权请求期间,和请求中的state参数一样。

令牌请求

一旦授权码被获取到了,客户端可以用它获取访问令牌。这是访问令牌请求参数:

grant_type 必须。必须被设置到授权码中。
code 必须。被授权服务器接收到的授权码。
redirect_uri 必须。如果请求URI包括在授权请求中,之后必须是相同的。

令牌响应 访问令牌请求的响应是包含访问令牌及一些更多信息的JSON字符串:

{ "access_token"  : "...",
  "token_type"    : "...",
  "expires_in"    : "...",
  "refresh_token" : "...",
}

access_type属性是授权服务器分配的访问令牌。 token_type是被授权服务器分配的令牌类型。 expires_in属性是指访问令牌过多少秒后,就不再有效。访问令牌过期值是可选的。 refresh_token属性包含令牌过期后刷新的令牌。刷新的令牌用于,一旦响应返回的不再有效时,包含一个新的访问令牌。