2017-08-31 63 views
1

我使用Okta進行身份管理。作爲授權流程中的客戶端,我向Okta發送授權請求。這工作成功,我得到一個JWT有效載荷。我想驗證JWT簽名,因此我再次致電Okta以獲取密鑰。但是,關鍵ID(孩子)不匹配,驗證失敗。小孩在OAuth 2.0流程上不匹配

初始授權請求:

https://{{site}}.okta.com/oauth2/v1/authorize 
    ?scope=openid 
    &response_type=id_token 
    &client_id={{client_id}} 
    &redirect_uri={{redirect_url}} 
    &nonce=4euiv0v52at3la15e7qlu1mt43 
    &state=7c92bqulrmdk2jk0ro9rd3mf5j 

響應是403,重定向我:

{{redirect_url}}/id_token={{id_token}} 

的id_token的首部被解碼成:

{ 
    "alg": "RS256", 
    "kid": "2YKtkekCjCRWN0YqGsjUrNwIQaxGg5ahfHW0_fK8t64" 
} 

到目前爲止好。我知道授權成功了。是時候驗證智威湯遜了。

但是,如果這是跟進:

https://{{site}}.okta.com/oauth2/v1/keys 

或者

https://{{site}}.okta.com/oauth2/v1/keys?clientId={{client_id}} 

(它們都返回相同的響應),我回來的:

{ 
    "keys": [ 
    { 
     "alg": "RS256", 
     "e": "AQAB", 
     "n": "gv1rI9A7mrOoViJZTzUfiZl7YdEzLEofvRoVbXCgeW7aOmoKcAkWGHvqNRGoFgi8auV5b_TSgTXKq_TV1fz643hpAtba3V0Uw2lXchTbqXpmVRYXI1t4FIwRMXLe4Q-kcvp9la21e3D1lszjdPbFNX5GLAhrCW0Thu2HYbTLg6TbDTMaiQCMo15hek0JgZqRGzCkt9kINnwPVLXV_bkSh_fHWo_6G1L0MKYYQcgE6zvPlULLek98-yZ6Nlg6nJUY9nHn0qjhzqqq-bz_Vin8qi3Bt7SjUKwk7HbaugM84AEgDxYE5JgsaALIl5SgIc3GgFEc69qKWymoD-w1a8f1HQ", 
     "kid": "SOxFkBSLWefjlZoDI49Hk0nqlYtC28cjhTlVAYEzAxs", 
     "kty": "RSA", 
     "use": "sig" 
    } 
    ] 
} 

在哪裏這個孩子與我在原始答覆中收到的不符。

我的錯誤在哪裏?

+0

這是一個很好的問題!我冒昧地稍微編輯一下,以便讓其他可能遇到這種情況的人更易讀。如果您認爲我的編輯太多改變了您的問題的含義,請告訴我。 –

回答

2

您需要創建一個授權服務器,並以此爲端點,例如:

https://{{site}}.okta.com/oauth2/{authorizationServerId}/v1/authorize 

你也應該能夠使用默認的一個:

https://{{site}}.okta.com/oauth2/default/v1/authorize 

注意,這是不同於您使用的路線(不指定授權服務器):

https://{{site}}.okta.com/oauth2/v1/authorize 

對於OAuth 2.0和OpenID Connect,您應該在您的情況下指定授權服務器(如上面的示例1和2)。

+0

感謝您的回覆。我發現OAuth2流程是這樣,但根據OpenID流程的文檔,沒有指定授權服務器 - Okta是唯一的。 檢查/.well-known/openid-configuration顯示我正在使用的URL,沒有在路徑中指定授權服務器。 – Magua

+0

您使用什麼語言來驗證智威湯遜?我們可能有一個圖書館可以幫助你。 –

+0

@Magua文檔似乎暗示您不能將OIDC與定製授權服務器一起使用,但您可以。OAuth 2.0和OpenID Connect都可以與自定義AS一起工作。正如馬特所說,你可能已經有了一個叫做'default'的自定義AS。 –

0

問題是這個帳戶是用固定的而不是旋轉鍵來設置的。 oauth2/v1/keys要求將客戶端ID作爲參數傳入,如果使用固定鍵進行設置;正確的參數名稱是「client_id」,而不是「clientId」。這導致了預期的輸出。