多个身份验证方案和WWW身份验证挑战

问题描述:

我正在开发支持多种身份验证方案(OAuth,BearerBasic)的REST API。当Authorization不存在头部或包含未支持的模式,服务与多个WWW-Authenticate头回应:多个身份验证方案和WWW身份验证挑战

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

+0

问题反馈:为什么*不*全部发送? –

+0

我没有在规范中找到任何明确的指导,并且除了所尝试的其他方案/领域之外,还会给调用者造成困惑。这就是说,我同意,这是不够的理由_不这样做。我已经添加了[answer](https://stackoverflow.com/questions/45307985/multiple-authentication-schemes-and-www-authenticate-challenges/45335224#answer-45335224)。 – shelley

虽然它没有严格要求,RFC 7235似乎表明,所有支持的身份验证方案应当返还。这将为调用者提供最多的信息,只要他们能够正确解析这些标头。

4.1。 WWW-Authenticate

“WWW-Authenticate”标题字段指示适用于目标资源的方案和参数的认证 。

WWW验证= 1个#挑战

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

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

更新RFC7235说:

注:很多客户端无法解析包含未知的方案是一个挑战。解决这个问题的方法是首先列出支持良好的方案(如“基本”)。

+0

此答案涉及CHAP协议,该协议与HTTP或RESTful服务无关。 – shelley

+0

你说得对。 HTTP提供了一个简单的挑战 - 响应认证框架。正确的答案应该是:首先提供所有计划和良好支持计划的清单。 – ExploitFate