3.1.2.6 验证错误响应(Authentication Error Response)
验证错误响应是一个OAuth 2.0授权错误响应消息,是RP发送授权请求的消息,由OP授权终结点的响应返回。
如果终端用户拒绝这个请求或终端用户验证失败,OP(授权服务器) 通过使用错误响应通知RP(客户端),其参数定义在 OAuth 2.0 [RFC6749] 4.1.2.1节中。与RFC 6749(HTTP错误返回给User Agent使用适当的HTTP状态码。)
除非重定向的URI无效,授权服务器返回的由客户端重定向的URI中指定的授权请求与适当的错误和状态参数。其他参数不应该返回。
除了 OAuth 2.0 4.1.2.1节定义的错误代码,该规范还定义了以下错误代码:
interaction_required
授权服务器需要某种形式与终端用户进行交互。当在认证请求中包含prompt参数值为none时,这个错误可能会返回,但在没有显示终端用户操作的用户界面减肥,验证请求不能完成。
login_required
授权服务器需要终端用户进行验证。当在认证请求中包含prompt参数值为none时,这个错误可能会返回,但在没有显示终端用户操作的用户界面减肥,验证请求不能完成。
account_selection_required
对终端用户是必需的,当选择一个会话在授权服务器。当终端用户没有选择会话,但终端用户又可能在授权认证服务器与不同账户关。当在认证请求中包含prompt参数值为none时,这个错误可能会返回,但在没有显示终端用户操作的用户界面减肥,验证请求不能完成。
consent_required
授权服务器需要终端用户同意。当在认证请求中包含prompt参数值为none时,这个错误可能会返回,但在没有显示终端用户操作的用户界面减肥,验证请求不能完成。
invalid_request_uri
授权请求返回的request_uri中返回包含一个错误或包含无效数据。
invalid_request_object
request参数包含一个无效的请求对象。
request_not_supported
OP不支持使用在第六节中定义的request参数。
request_uri_not_supported
OP不支持使用在第六节中定义的request_uri 参数。
registration_not_supported
OP不支持使用在7.2.1节中定义的 registration 参数 。
错误响应参数如下:
error
必需的。错误代码。
error_description
可选的。人类可读的ASCII 编码的文本描述的错误。
error_uri
可选的。包括额外的信息错误web页面的URI。
state
OAuth 2.0状态值。如果需要包括 state 参数授权请求。设置从客户端收到的值。
当使用授权码流,添加到重定向查询组件的URI的错误响应参数,除非指定不同的响应模式。
下面是使用错误响应的一个非规范化的例子 (换行仅表达显示目的):
HTTP/1.1 302 Found
Location: https://client.example.org/cb?
error=invalid_request
&error_description=
Unsupported%20response_type%20value
&state=af0ifjsldkj
3.1.2.7验证响应验证(Authentication Response Validation)
当使用授权码流,客户端必须根据RFC 6749验证响应,尤其是4.1.2和10.12节。
3.1.3令牌终结点(Token Endpoint)
获得Access Token,ID Token,和可选的Refresh Token,RP(客户端)发送一个令牌请求给令牌终结点并获得令牌的响应。使用授权码流,如3.2节的 OAuth 2.0 (RFC6749) 所述。
与令牌通信终结点必须使用TLS。参看 16.17节 使用TLS的更多信息。
3.1.3.1令牌的请求(Token Request)
客户端发出一个令牌请求,出示其授权许可(授权码一种形式),为令牌终结点提供grant_type 值,就像OAuth 2.0 [RFC6749] 4.1.3节中 authorization_code 描述的一样。如果客户端是一个保密客户端,那么它必须使用验证方法验证令牌终结点注册的 client_id 值,如9节中描述一样。
客户端使用HTTP POST 方法和表单序列化参数发送给令牌终结点,在OAuth 2.0 [RFC6749] 13.2节 、4.1.3节中描述过。
下面是一个非规范化的令牌的请求:
POST /token HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA
&redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb
3.1.3.2请求令牌验证(Token Request Validation)
授权服务器必须验证令牌请求如下:
- 对客户端进行验证,如果是发布客户端凭据或者使用另一个客户验证方法,第 9节定义;
- 确保授权码发布给验证过的客户端。
- 验证授权码是有效的。
- 如果可能的话,验证授权码是以前没有使用过的。
- 确保 redirect_uri 参数值是和最初的授权请求的 redirect_uri 参数值是相同的。如果 redirect_uri 参数值是一个不存在的redirect_uri注册值时,授权服务器可能返回一个错误 (因为客户端应该包括该参数) 也可能不返回错误 (因为OAuth 2.0在这种情况下允许参数被省略)。
- 验证所使用的授权码者和OpenID Connect 验证的请求发出者 (因此ID Token将从令牌终结点返回)。
3.1.3.3成功的令牌响应(Successful Token Response)
从客户机收到和验证一个有效的和授权的令牌的请求,授权服务器返回包含一个ID Token和一个Access Token的成功响应。在OAuth 2.0 [RFC6749] 4.1.4节参数定义成功的响应。响应使用 application/json 元数据类型。
在使用OAuth 2.0 (RFC6750