PayPal OpenID访问令牌缺少请求的条目

时间:2018-01-03 08:12:28

标签: paypal openid-connect

我有一个服务器驻留的基于JVM(特别是Clojure)的应用程序,该应用程序具有可用的OpenID Connect客户端实现,允许我成功地针对Google和Microsoft的OpenID Connect服务对我的用户进行身份验证。我正在尝试配置应用程序以支持PayPal的ersatz OpenID Connect,并且遇到了许多问题。

我有:

  1. 在PayPal开发人员信息中心中创建并成功保存了应用程序(名称,返回网址,隐私和条款链接,所需权限等)。
  2. 使用仪表板中正确的应用程序ID和应用程序密钥信息,在我的应用程序配置中配置Live和Sandbox条目。
  3. 为Live和Sandbox指定我只想为全名和电子邮件授予访问权限。
  4. 对于Live和Sandbox,我可以:

    此时,Live实例返回genericError屏幕,没有任何有用信息。 PayPal信息中心的API调用屏幕显示我最近没有拨打电话。

    另一方面,Sandbox使用授权码重定向回我的应用程序,并且我能够使用该代码来请求id_token。我提供的范围参数包括openidprofileemail。对此的回复包括预期的id_token。但是,虽然验证此JWT令牌的正常(jose4j)程序不起作用(验证选择器找不到有效密钥),但我可以尝试PayPal中的每个密钥jwks键集,其中一个确实可以验证JWT。

    然而,解码的JWT缺少我期望的信息。我回来的JWT的关键是:

    • auth_time
    • exp
    • sub
    • iss
    • session_index

    鉴于我已授予个人资料和电子邮件访问权限,并在范围内请求了个人资料和电子邮件,我希望在JWT中获得姓名和电子邮件地址,但他们不在那里。

    所以,我还有三个问题:

    1. 如何从授权工作流程调试genericError?
    2. 如何从令牌服务获取电子邮件和名称信息?
    3. 为什么Live和Sandbox的行为有所不同?
    4. 非常感谢任何关于这些的提示。

1 个答案:

答案 0 :(得分:0)

检索PayPal上的电子邮件和姓名信息的部分答案。看起来正确的工作流程是:

  1. 最初从授权终端
  2. 请求authorization_code而不是id_token
  3. 通过令牌服务交换access_token,然后
  4. 使用userinfo端点获取用户信息,并将访问令牌作为Bearer授权。
  5. PayPal的开发者信息肯定记录了这一点,但它不同于Microsoft和Google的OpenID Connect实现,更像是OAuth2,因为我(非常)理解它。

    然而,虽然这允许我现在从Sandbox实现获取电子邮件,但我仍然得到一般错误而不是来自Live授权端点的回调,没有任何信息可以帮助诊断该问题。