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

Posted

技术标签:

【中文标题】在 OAuth2 身份验证调用和重定向调用之间传递值【英文标题】:Passing value between OAuth2 auth call and redirect call 【发布时间】:2019-11-24 14:59:26 【问题描述】:

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

//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 请求的加密“状态”字段。试图了解执行这些操作的标准方法。有什么建议吗?

【问题讨论】:

【参考方案1】:

你可以使用状态参数:

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

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

Passing base64 encoded strings in URL

【讨论】:

以上是关于在 OAuth2 身份验证调用和重定向调用之间传递值的主要内容,如果未能解决你的问题,请参考以下文章

使用 oauth2 和 jwt 在 FastApi 中进行身份验证

使用 JHipster、Spring Security 和 oauth2 控制身份验证重定向

Spring Cloud OAuth2:身份验证后再次重定向到登录页面,就像使用表单登录时未经身份验证一样

使用JHipster,Spring Security和oauth2控制身份验证重定向

Spring Boot:Oauth2:访问被拒绝(用户是匿名的);重定向到身份验证入口点

调用 javascript 警报和重定向 url 问题