多种认证方案和WWW认证挑战

时间:2017-07-25 15:43:14

标签: rest http authentication oauth oauth-2.0

我正在开发支持多种身份验证方案的REST API(OAuthBearerBasic)。当Authorization标头不存在或包含不受支持的方案时,该服务会响应多个WWW-Authenticate标头:

WWW-Authenticate: OAuth realm="myRealm"
WWW-Authenticate: Bearer realm="myRealm"
WWW-Authenticate: Basic realm="myRealm"

如果请求包含Authorization标头,其中包含受支持的方案之一但凭据无效,我的服务是否应使用所有支持的WWW-Authenticate方案进行响应,或者只是请求中提供的方案?

例如,如果客户提供:

Authorization: Bearer invalid

我的服务是否应该只响应Bearer质询?

WWW-Authenticate: Bearer realm="myRealm", error="invalid_token", error_description="token is malformed or represents invalid credentials"

或者它应该回应所有WWW-Authenticate个挑战?

WWW-Authenticate: Bearer realm="myRealm", error="invalid_token", error_description="token is malformed or represents invalid credentials"
WWW-Authenticate: OAuth realm="myRealm"
WWW-Authenticate: Basic realm="myRealm"

编辑:RFC 7235似乎提供了一个建议,虽然它不具体。我相应地添加了answer

2 个答案:

答案 0 :(得分:2)

虽然并非严格要求,但RFC 7235似乎建议应返回所有支持的身份验证方案。这将为调用者提供最多信息,前提是他们能够正确解析这些标题。

  

4.1。 WWW身份验证

     

" WWW-Authenticate" header字段表示身份验证   适用于目标资源的计划和参数。

     

WWW-Authenticate = 1#challenge

     

生成401(未授权)响应的服务器必须发送一个   WWW-Authenticate标头字段,包含至少一个质询。一个   服务器可以在其他响应中生成WWW-Authenticate头字段   消息以指示提供凭据(或不同的   凭证)可能会影响响应。

答案 1 :(得分:-2)

  

验证者指定在链路建立阶段在配置请求中使用的验证协议。   RFC1994

更新RFC7235说:

  

注意:许多客户端无法解析包含未知方案的挑战。此问题的解决方法是首先列出支持良好的方案(例如" basic")。