Nodejs如何绕过关于外部验证方法的无数据重定向的限制?



我有一个NodeJS应用程序,我让我的用户通过Github和Google等外部认证登录。

在前端,我为客户端打开Github中的选项卡,例如,提示他授权Github反对我的应用程序。我也用回调url来做这个。然后Github将用户重定向到我配置的回调url。

当前这个回调URL是一个API在我的服务器。下一步是将用户重定向到我的主页。但是,我需要向用户提供一些凭证,如JWT令牌。

但是我只能发送一些数据和重定向操作。我该怎么办?

我提供以下数据与Github:

super({
clientID: configService.get('githubOAuthClientId', { infer: true }),
clientSecret: configService.get('githubOAuthClientSecret', { infer: true }),
callbackURL: configService.get('githubOAuthRedirectUri', { infer: true }),
scope: ['user:email'],
});

githubOAuthRedirectUri变量保存我的后端api路由。然后我在这个路由控制器中处理从GitHub接收的数据。现在我想将用户重定向到主页,但他还需要JWT令牌和一些更多的用户特定数据。

从Github接收到数据后,你可以重定向到一个中间页面,例如在url查询中发送数据,然后前端应用重定向到主页。这是我的主意

我假设OAuth提供商(Google或GitHub)将在URL参数?code=...中调用带有授权码的回调URL。然后,您的服务器必须通过向OAuth提供程序发出令牌请求,将此授权码交换为访问令牌。然后对令牌请求的响应将包含访问令牌,它是

  • 要么JWTsub索赔包含(很可能)用户的电子邮件地址,见https://stackoverflow.com/a/72590693/16462950
  • 或一个"不透明的";令牌,你的服务器必须在UserInfo请求的Authorization: Bearer头中使用。

这些步骤后你知道用户是谁。您的服务器可以将JWT放在会话cookie中,以便在所有后续请求中再次发送(并且必须再次验证)。

如果您的服务器接收到一个不透明令牌而不是JWT,这可能只是短暂的,因此不能在会话cookie中使用。在这种情况下,您的服务器可以构造包含用户信息的自己的JWT。

最新更新