多个身份验证方案和WWW身份验证挑战
我正在开发支持多种身份验证方案(OAuth
,Bearer
和Basic
)的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似乎表明,所有支持的身份验证方案应当返还。这将为调用者提供最多的信息,只要他们能够正确解析这些标头。
4.1。 WWW-Authenticate
“WWW-Authenticate”标题字段指示适用于目标资源的方案和参数的认证 。
WWW验证= 1个#挑战
的服务器产生一个401(未授权)响应必须发送包含至少一个挑战 WWW-Authenticate头字段。 服务器可能会在其他响应 消息中生成WWW-Authenticate标头字段,以指示提供凭证(或不同的凭证)可能会影响响应。
认证者指定在链路建立阶段在配置请求中使用的认证协议。 RFC1994
更新RFC7235说:
注:很多客户端无法解析包含未知的方案是一个挑战。解决这个问题的方法是首先列出支持良好的方案(如“基本”)。
此答案涉及CHAP协议,该协议与HTTP或RESTful服务无关。 – shelley
你说得对。 HTTP提供了一个简单的挑战 - 响应认证框架。正确的答案应该是:首先提供所有计划和良好支持计划的清单。 – ExploitFate
问题反馈:为什么*不*全部发送? –
我没有在规范中找到任何明确的指导,并且除了所尝试的其他方案/领域之外,还会给调用者造成困惑。这就是说,我同意,这是不够的理由_不这样做。我已经添加了[answer](https://stackoverflow.com/questions/45307985/multiple-authentication-schemes-and-www-authenticate-challenges/45335224#answer-45335224)。 – shelley