我正在开发支持多种身份验证方案的REST API(OAuth
,Bearer
和Basic
)。当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"
答案 0 :(得分:2)
虽然并非严格要求,但RFC 7235似乎建议应返回所有支持的身份验证方案。这将为调用者提供最多信息,前提是他们能够正确解析这些标题。
4.1。 WWW身份验证
" WWW-Authenticate" header字段表示身份验证 适用于目标资源的计划和参数。
WWW-Authenticate = 1#challenge
生成401(未授权)响应的服务器必须发送一个 WWW-Authenticate标头字段,包含至少一个质询。一个 服务器可以在其他响应中生成WWW-Authenticate头字段 消息以指示提供凭据(或不同的 凭证)可能会影响响应。
答案 1 :(得分:-2)