2015-08-14 79 views
7

我在我的應用程序中使用JWT實現了OAuth 2.0,並且無法確定如何將其設置爲我的aud聲明。用戶將通過我的身份驗證服務器「登錄」到我的客戶端,以訪問我的API(資源)服務器。我希望我的令牌只適用於特定的客戶端和特定的API。客戶端ID或JSON網絡令牌中的多個受衆

authentication flow

當從我的客戶端登錄,我包括it't client_id的請求,但在mostimplementationsI'vefound,則aud被設置爲client_id。我傾向於包括我的登錄請求客戶audience_id域,然後在令牌設置audclient_idaudience_id的數組,但感覺喜歡它只是意味着該令牌的有效期爲這兩個audiences ,這讓我覺得我應該添加一個名爲client的自定義聲明來明確指出此標記是爲特定客戶端創建的。

我還沒有碰到過任何網上實現包括進來既是client_id和一個OAuth登錄請求audience_id(S),況且我看到clientin the spec保留要求。

我在這裏錯過了什麼嗎?

在JWT中具體陳述不同client_idaudience_id的最佳做法是什麼?

回答

7

JWT的受衆是資源服務器,因爲這是令牌將被處理,即驗證,檢查和採取行動的地方。從RFC 7519,https://tools.ietf.org/html/rfc7519#section-4.1.3

的 「AUD」(觀衆)根據權利要求識別收件人的JWT是
用於。旨在處理JWT的每個負責人都必須在受衆羣體聲明中標識其價值。
[...]
受衆值的解釋通常是特定於應用程序的。
[...]

所以最好的做法是,aud應查明資源服務器。

客戶端只是令牌的提供者,並且對於該聲明使用azp(授權展示者)是最佳實踐(即在OpenID Connect和一些新興的OAuth 2.0風險草稿中)。從http://openid.net/specs/openid-connect-core-1_0.html#CodeIDToken

azp
可選。授權方 - ID標識爲 的一方簽發。如果存在,它必須包含這個 派對的OAuth 2.0客戶端ID。只有當ID令牌具有單個觀衆值並且觀衆不同於授權的 派對時,才需要此索賠。
[...]

所以最好的做法是,azp標識客戶端。

+0

然後在來自客戶端的初始登錄請求中包含一個'audience_id',指出他們請求訪問的受衆羣體? – Greg

+1

該關係可以間接使用「範圍」概念(和請求參數)創建;這可以提供更大的靈活性,而不僅僅是範圍和資源服務器之間的一對一映射;一般而言,範圍建模了訪問權限:範圍可映射到資源服務器,但也可映射到由資源服務器等等保護的特定資源或資源服務器集合 –