2017-08-02 67 views
2

我正在實施「使用PayPal登錄」功能。應該相當簡單,但不幸的是PayPal缺乏文檔(只描述了一些基本的東西)。PayPal id_token驗證

我使用「登錄貝寶」插件獲得authorization_code。我向https://api.sandbox.paypal.com/v1/identity/openidconnect/tokenservice發出請求,並通過access_token,refresh_token和id_token獲取JSON。我想獲得唯一的用戶標識符,所以我解碼id_token,但我無法驗證我的id_token的簽名。 Id_token頭部包含{"alg": "HS256", "typ": "JWT"}

我應該使用什麼祕密呢?嘗試了我的應用程序的祕密(我使用訪問令牌服務的祕密),但它不起作用(使用https://jwt.io/調試器)。

+0

他們是否提供發現文檔? [http://openid.net/specs/openid-connect-discovery-1_0.html] –

+1

@KcDoD也許他們有,但它似乎沒有被記錄:) – Fedor

回答

1

PayPal是不是OpenID的連接標準。 This答案解釋了原因。

貝寶公開配置端點 - https://www.paypalobjects.com/.well-known/openid-configuration。它只支持HS256,不支持或不提及RS256。這可能是由於ID令牌的專有驗證。例如,用作不記名令牌的id令牌。

替代的解決方案是通過document描述來調用userinfo端點。此端點可以使用access token被調用,文件說,它會返回user_id

USER_ID - 標識在發行人的最終用戶。

雖然它似乎在用戶信息中發現user_idsub,可以從id_token提取不同。

如何找到公共密鑰,如果簽名算法是RS256

ID令牌是智威湯遜。正如您發現的那樣,它包含一個充當MAC的JWS簽名。

這個簽名是利用私鑰簽名。 id令牌的接收者可以使用公鑰驗證令牌。爲了找到公鑰,openid conenct指定一個發現文檔。您可以從specification

中瞭解更多信息在發現文檔中,您會得到一個特殊端點來推斷配置.well-known/openid-configuration。和配置響應的必須的元數據中的一個是jwk_url

jwks_uri

REQUIRED。 OP的JSON Web密鑰集[JWK]文檔的URL。此 包含RP用來驗證來自 OP的簽名的簽名密鑰。 JWK集合還可以包含服務器的加密密鑰 ,這些密鑰由RP用於加密對服務器的請求。當兩個 簽名和加密密鑰提供了一個用(鍵使用) 參數值需要在參考JWK設爲 所有鍵指示每個按鍵的設計用途。雖然有些算法允許使用同一個密鑰同時用於簽名和加密,但這樣做的結果不是 ,因爲它不太安全。 JWK x5c參數可以是 ,用於提供所提供的密鑰的X.509表示。在使用時, 裸露鍵值必須仍然存在,並且必須與 證書中的值匹配。

+0

謝謝你的幫助。您是不是描述了RSA簽名的情況?礦山有HS256(這在JOSE中有描述)。所以它應該是一個簡單的情況,客戶端和服務器都使用一個共享密鑰進行簽名。不是嗎? – Fedor

+0

@Fedor啊,是的。我沒有把注意力放在jose頭文件中的算法上。那麼我來過這個開發討論https://groups.google.com/forum/#!topic/mod_auth_openidc/fPc_C8rb9ns –

+0

好吧,這裏有一個很好的解釋 - https://stackoverflow.com/questions/31143353/using-login -with-貝寶和使用,OpenID的用-AWS-cognito。我希望這應該清除疑惑:) –