向服务器传递参数(Stripe Connect 中的 oAuth 回调)

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

我正在按照说明设置 Stripe Connect here(独立帐户)。我在我的节点服务器上处理 access_token 的授权和检索。

用户可以访问 link 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)? 我想后者不是推荐的选项。

我做了两次尝试:

可以做什么?

一般你的场景是这样的:

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

注:

  1. 不要试图破解 authorization_code OAuth 流程
  2. 您可能会发现 Grant easier to use for that type of OAuth flow, Stripe 受支持
  3. 相关comment

您必须将您的用户 ID 作为 "state" 参数传递,Stripe 将在回调中 return 它。我发现避免 session

的唯一方法