在 OAuth2 身份验证调用和重定向调用之间传递值

Passing value between OAuth2 auth call and redirect call

我有一个使用 OAuth2 的简单节点应用程序。我们的应用程序调用另一个应用程序来授权我的用户并将其发送回我的应用程序。 所以流程是用户触发操作,将它们重定向到外部服务器。成功登录后,他们将被重定向回我们的应用程序。问题是我需要一些信息,比如来自第一次通话的用户信息,当他们以不同的终点返回我的应用程序时,这些信息就会丢失。我正在使用 hapi and simple-oauth2 库。

//hapi routes

server.route(
  {
    method: 'GET',
    path: '/validate',
    handler: function (request, h) {
      var params = request.query;
      var userId = params.userId;
      var info: params.info;
      .....
      h.redirect(authorizationUri);
    }
  },
  {
    method: 'GET',
    path: '/callback',
    handler: function (request, h) {
      var token = getTokenUsingSimpleOAuth2Lib(request);
      //I do not have access to userId and info from orginal client request
      saveTokenWithUserIdAndInfo(token, userId, info);
    }
  }
);

如上所示第二次回调我没有来自原始调用的那些信息。我猜我们可以使用缓存作为 OAuth2 请求的存储或加密 'state' 字段。试图了解执行这些操作的标准方法。有什么建议吗?

您可以使用状态参数:

https://auth0.com/docs/protocols/oauth2/oauth-state

我没有使用与您相同的技术堆栈,但我遇到了同样的问题。您必须对放入状态参数的数据使用 url base64 编码。您可以在此处阅读更多相关信息:

Passing base64 encoded strings in URL