PayPal id_token验证

时间:2017-08-02 00:01:26

标签: paypal oauth-2.0 jwt openid-connect

我实施"使用PayPal登录"功能。应该相当简单,但遗憾的是PayPal缺少文档(只描述了一些基本的东西)。

我使用"使用PayPal登录"小部件。我向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"}

我应该使用什么秘密?尝试了我的应用程序的秘密(我用来访问tokenservice),但它没有用(使用https://jwt.io/调试器)。

1 个答案:

答案 0 :(得分:1)

PayPal不符合OpenID连接。 This答案解释了原因。

PayPal公开配置端点 - https://www.paypalobjects.com/.well-known/openid-configuration。它仅支持HS256,不支持或提及RS256。这可能是由于ID令牌的专有验证。例如,用作承载令牌的id令牌。

替代解决方案是按document所述调用userinfo端点。可以使用access token调用此端点,文档说它将返回user_id

  

user_id - 发卡行最终用户的标识符。

虽然似乎在userinfo中找到的user_id与可从id_token中提取的sub不同。

如果签名算法是RS256

,如何找到公钥。

ID令牌是JWT。如您所知,它包含一个充当MAC的JWS签名。

此签名是使用私钥签名的。 id令牌的接收者可以使用公钥来验证令牌。要查找公钥,openid conenct指定发现文档。您可以从specification

了解更多相关信息

在发现文档中,您将获得一个特殊端点来推断配置.well-known/openid-configuration。其中一个必须具有配置响应的元数据是jwk_url

<强> jwks_uri

  

必需的。 OP的JSON Web密钥集[JWK]文档的URL。这个   包含RP用于验证签名的签名密钥   OP。 JWK Set MAY还包含服务器的加密密钥,   RP使用它来加密对服务器的请求。当两个   签名和加密密钥可用,一个用途(密钥使用)   参考JWK设置为的所有键的参数值都是必需的   表示每个密钥的预期用途。虽然有些算法允许   同样用于签名和加密的密钥,这样做   不推荐,因为它不太安全。 JWK x5c参数可以是   用于提供所提供密钥的X.509表示。使用时,   裸键值必须仍然存在并且必须与中的那些相匹配   证书。