2017-07-25 190 views
0

我正在開發支持多種身份驗證方案(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

回答

1

雖然它沒有嚴格要求,RFC 7235似乎表明,所有支持的身份驗證方案應當返還。這將爲調用者提供最多的信息,只要他們能夠正確解析這些標頭。

4.1。 WWW-Authenticate

「WWW-Authenticate」標題字段指示適用於目標資源的方案和參數的認證 。

WWW驗證= 1個#挑戰

的服務器產生一個401(未授權)響應必須發送包含至少一個挑戰 WWW-Authenticate頭字段。 服務器可能會在其他響應 消息中生成WWW-Authenticate標頭字段,以指示提供憑證(或不同的憑證)可能會影響響應。

-2

認證者指定在鏈路建立階段在配置請求中使用的認證協議。 RFC1994

更新RFC7235說:

注:很多客戶端無法解析包含未知的方案是一個挑戰。解決這個問題的方法是首先列出支持良好的方案(如「基本」)。

+0

此答案涉及CHAP協議,該協議與HTTP或RESTful服務無關。 – shelley

+0

你說得對。 HTTP提供了一個簡單的挑戰 - 響應認證框架。正確的答案應該是:首先提供所有計劃和良好支持計劃的清單。 – ExploitFate