2017-07-11 125 views
1

從我的理解,從使用OAuth ID連接不同的是,當客戶點擊/令牌的OAuth的終點,OAuth的出現以下響應:openID Connect如何真正認證用戶?

HTTP/1.1 200 OK 
Content-Type: application/json 
Cache-Control: no-store 
Pragma: no-cache 

{ 
    "access_token": "SlAV32hkKG", 
    "token_type": "Bearer", 
    "refresh_token": "8xLOxBtZp8", 
    "expires_in": 3600, 
    "id_token": "e134j23jk432j" 
} 

我的印象是從閱讀文檔的ID令牌包含一種認證類型,用於表示用戶是否通過輸入密碼來通過授權。因此,這將驗證用戶是否進行了身份驗證,而不僅僅是授權。我只是不清楚如何使用令牌來驗證這一點。

這是我的理解id_token對客戶端不是不透明的,那麼是否有標準的方式來讓客戶端解釋信息?

此外,我在http://openid.net/specs/oauth-v2-multiple-response-types-1_0.html下找到的文檔5. Definitions of Multiple-Valued Response Type Combinations顯示了一個示例請求,用於對id_token進行/授權。不應該在/ token處獲取id_token?

+0

對amr要求使用調試器的功能(身份驗證方法的引用)是可選的,我相信 - 所以你可能無法得到是否密碼信息不用。無論哪種方式,我不確定你的意思是'驗證用戶是否進行了身份驗證,而不僅僅是授權。「無論是否輸入密碼,他們都是通過IdP進行身份驗證的。沒有什麼是被授權的 – iandayman

回答

0

這是我的理解id_token是不是不透明的客戶

因此,這是需要澄清。 Id令牌是JWT(rfc7519),它必須由客戶端驗證。

請注意,這裏的「客戶端」是依賴方。例如,它是一個網站。此客戶端依賴於在openid提供商(授權服務器,如rfc6749中所述)中完成的授權,並在響應中使用id令牌來驗證「最終用戶」。

從文檔引用,

主要擴展,ID連接使得至OAuth 2.0,以使最終用戶能夠被認證的ID令牌數據結構。 ID令牌是一個安全令牌,其中包含有關授權服務器在使用客戶端時對最終用戶進行身份驗證的聲明以及潛在的其他所請求的聲明。 ID令牌被表示爲JSON Web令牌(JWT)

現在回到問題。如何閱讀和理解JWT並使用它來認證用戶。 JWT的規格在這裏 - rfc7519。它基本上包含以下格式三段,

H.C.S

H(頭) - 包含類型和算法和其它元信息

C(JWT權利要求書) - 包含關於權利要求書授權用戶

S(JWS簽名rfc7515 - 基本這是一個MAC,它將驗證標題和聲明

並且這些部分中的每一個都是base64url編碼。請注意,JWS由令牌頒發者簽署。

從文檔

ID標記必須使用JWS [JWS]和任選的兩個簽名被簽名,然後引用使用JWS [JWS]和JWE [JWE]分別,從而提供認證,完整性,非加密-repudiation和可選性,保密性,每科16.14

什麼需要在id token進行驗證,specification提到你需要做什麼。

希望這闡明你的懷疑智威湯遜和如何使用它來驗證「最終用戶」

不宜id_token被AT /代幣獲取?

這取決於您使用的流程。例如,implicit flow允許您在授權響應中獲取id令牌。

PS - 要查看ID令牌的內容,你可以從https://jwt.io/

+1

謝謝這真的很有幫助。我的最後一點混亂:是否在客戶端使用解密的id_token中有一個特定字段來確認最終用戶是否已通過身份驗證? – kmd

+0

@kmd好吧,它自己的驗證ID令牌是驗證最終用戶的證明。您唯一需要做的就是驗證令牌,檢查是否設置了所有必要的聲明。檢查MAC是合法的。這應該能夠完成這項工作。爲此,一些圖書館可能會有所幫助[https://developers.google.com/api-client-library/]。 –

+0

此外,令牌中的子索賠說明此ID令牌的最終用戶是爲其頒發的。 –