将参数传递给服务器(在Stripe Connect中使用oAuth回调)

Passing parameters to the server (oAuth callback in Stripe Connect)

本文关键字:oAuth 回调 Connect Stripe 参数传递 服务器      更新时间:2023-09-26

我正在设置这里解释的Stripe Connect(独立帐户)。我在我的节点服务器上处理access_token的授权和检索。

用户可以访问链接MY_SERVER_URI/authorize,并将被重定向到预定义的分条AUTHORIZE_URI:

app.get("/authorize", function(req, res) {
  // Redirect to Stripe /oauth/authorize endpoint
  res.redirect(AUTHORIZE_URI + "?" + qs.stringify({
    response_type: "code",
    scope: "read_write",
    client_id: CLIENT_ID
  }));
});

用户授权Stripe Connect后,他或她将被重定向到预定义的REDIRECT_URI,在本例中等于MY_SERVER_URI/oauth/callback,其中执行以下脚本:

app.get("/oauth/callback", function(req, res) {
  var code = req.query.code;
  // Make /oauth/token endpoint POST request
  request.post({
    url: TOKEN_URI,
    form: {
      grant_type: "authorization_code",
      client_id: CLIENT_ID,
      code: code,
      client_secret: API_KEY
    }
  }, function(err, r, body) {
    var accessToken = JSON.parse(body).access_token;
    // Do something with your accessToken
    // For demo"s sake, output in response:
    res.send({ "Your Token": accessToken });
  });
});

现在这里的一切工作正常,应用程序能够获得accessToken。但是,这个accessToken需要保存并与从客户端授予访问权限的用户匹配。

因此,我的问题归结为,我如何在oauth/callback GET请求中传递客户端参数(如客户端userId),或在客户端处理服务器(例如$http GET请求而不是访问uri)?我想后者不是推荐的选项。

我做了两次尝试:

  • 我尝试使用动态REDIRECT_URI传递参数,但是问题是,条纹要求允许的url需要指定首先(导致不能在重定向中传递任何参数)url)。
  • 我试图访问$http GET请求的MY_STRIPE_URI/authorize,但这给了我明显的错误没有' access - control - allow - origin '标头存在于所请求的资源

可以做什么?

你必须传递你的用户id作为"状态"参数和Stripe将返回它的回调。我发现避免会话

的唯一方法

一般情况下,您的场景如下:

  1. 向服务器上的某些路由发出请求并存储用户id: req.session.user = {id: '...'}
  2. 从该路由将用户重定向到第三方授权URL
  3. 在接收访问令牌的路由中,也将其存储在会话中:req.session.user.access_token = '...'
  4. 在对Stripe API的后续请求中使用该访问令牌

注意:

  1. 不要试图破解authorization_code OAuth流
  2. 你可能会发现Grant更容易用于这种类型的OAuth流,Stripe是支持的
  3. 相关评论