我用的是paypal-rest-sdk.我面临的问题是,当我进行authorizationUrl调用时,我想传递一些可以在重定向URL中访问的参数。
下面的是我的代码
import paypal from 'paypal-rest-sdk';
const openIdConnect = paypal.openIdConnect;
paypal.configure({
mode: "sandbox"
client_id: //MyClientId,
client_secret: //MySecretId,
openid_redirect_uri: `http://myRedirectionEndpoint/account/domestic/paypal/callback?state={accountId:5e8c2291d69ed1407ec86221}`
});
openIdConnect.authorizeUrl({scope: 'openid profile'});添加查询参数状态使错误成为无效的redirectUri。
在重定向之后,传递需要使用的数据的最佳方法是什么?
发布于 2020-05-01 19:23:22
我想你有点误解了oauth授权的工作方式。基本上,如果您想获取任何数据,您需要在使用回调并在系统中验证用户之后进行此操作。
您是否见过Google/github等openid提供者返回一些与调用方系统数据相对应的数据?这不可能。
您可能将这与web钩子混淆在一起,调用方系统内部调用带有某些数据的web钩子,然后捕获它。通常用于支付交易中。
但法国的情况略有不同。对于我们来说,有三个系统。
=>现在呼叫系统调用auth提供程序来获得某种代码,通常是auth代码。这意味着用户存在于auth系统中,比如说Google。
=>然后调用系统调用身份提供者,检查用户是否也在身份提供者( idp )中,并且idp返回access_token、id_token、refresh_token等(正如我所说的,大多数情况下这些系统是相同的)。但是以amazon为例,假设您想用您的Google帐户登录Amazon。你有一个谷歌帐户,好吧,但你没有亚马逊帐户。因此,您将得到auth代码,但不会得到id_token。
=>,现在大多数情况下,id_token以JWT格式包含用户的一些基本信息。但是现在ACCESS_TOKEN被用来执行对系统(调用方系统)的所有其他调用。现在,正如我所说的,id_token是某种用户数据。可以在NodeJs服务中使用带有帐号的db表映射userid。
=>创建一个端点来获取帐户号或使用access_token和id_token的东西。首先验证access_token并验证id_token的签名,然后解密令牌以获取基本的用户信息。并使用该id从表中获取数据并使用该数据。
编辑后的:
您可以在文档中看到
paypal.configure({
'openid_client_id': 'CLIENT_ID',
'openid_client_secret': 'CLIENT_SECRET',
'openid_redirect_uri': 'http://example.com' });
// Authorize url
paypal.openIdConnect.authorizeUrl({'scope': 'openid profile'});
// Get tokeninfo with Authorize code
paypal.openIdConnect.tokeninfo.create("Replace with authorize code", function(error, tokeninfo){
console.log(tokeninfo);
});
// Get userinfo with Access code
paypal.openIdConnect.userinfo.get("Replace with access_code", function(error, userinfo){
console.log(userinfo);
});当您获得auth代码时,可以使用它来调用paypal.openIdConnect.tokeninfo.create并获取令牌。然后使用这些令牌调用paypal.openIdConnect.userinfo.get来获取用户信息。现在,当您获得userinfo时,您将能够创建要创建的db行。
您可以在您的/callback路由中添加以下两个调用。
https://stackoverflow.com/questions/61548465
复制相似问题