我有一个服务器驻留的基于JVM(特别是Clojure)的应用程序,该应用程序具有可用的OpenID Connect客户端实现,允许我成功地针对Google和Microsoft的OpenID Connect服务对我的用户进行身份验证。我正在尝试配置应用程序以支持PayPal的ersatz OpenID Connect,并且遇到了许多问题。
我有:
对于Live和Sandbox,我可以:
此时,Live实例返回genericError屏幕,没有任何有用信息。 PayPal信息中心的API调用屏幕显示我最近没有拨打电话。
另一方面,Sandbox使用授权码重定向回我的应用程序,并且我能够使用该代码来请求id_token。我提供的范围参数包括openid
,profile
和email
。对此的回复包括预期的id_token
。但是,虽然验证此JWT令牌的正常(jose4j)程序不起作用(验证选择器找不到有效密钥),但我可以尝试PayPal中的每个密钥jwks键集,其中一个确实可以验证JWT。
然而,解码的JWT缺少我期望的信息。我回来的JWT的关键是:
auth_time
exp
sub
iss
session_index
鉴于我已授予个人资料和电子邮件访问权限,并在范围内请求了个人资料和电子邮件,我希望在JWT中获得姓名和电子邮件地址,但他们不在那里。
所以,我还有三个问题:
非常感谢任何关于这些的提示。
答案 0 :(得分:0)
检索PayPal上的电子邮件和姓名信息的部分答案。看起来正确的工作流程是:
authorization_code
而不是id_token
access_token
,然后PayPal的开发者信息肯定记录了这一点,但它不同于Microsoft和Google的OpenID Connect实现,更像是OAuth2,因为我(非常)理解它。
然而,虽然这允许我现在从Sandbox实现获取电子邮件,但我仍然得到一般错误而不是来自Live授权端点的回调,没有任何信息可以帮助诊断该问题。