首页 > 解决方案 > 如何使用 JWT 以角度从中心域登录到子域?

问题描述

我想实现一个功能,其中有一个中央登录站点让我们说:https://example.com,当用户在此页面中输入登录凭据并从下拉列表中选择用户想要登录的子域时,用户登录到该子域,例如https://abc.example.com

我正在使用 MEAN 堆栈和 jwt 令牌进行身份验证。JWT 实现以标准方式应用,首先:将请求发送到“ /authenticate ”,然后返回令牌,令牌将存储在浏览器本地存储中。

我已经成功完成了一个站点身份验证,即。从https://example.com登录并在该域中登录用户,但现在
我想像这样实现流程 =>

在https://example.com的登录页面上:

  1. 用户可以从下拉列表中选择要登录的子域
  2. 在该用户输入登录凭据后(所有子域的这些凭据可以不同或相同)
  3. 用户被重定向到该子域的仪表板页面(JWT 令牌存储在该选定子域的本地存储中)

以上是我想要实现的流程,但如果其他流程达到相同的结果,可以更改

我已经搜索了有关此主题的问题和博客:
我已经完成了 SSO ...但这并不是我想要的;因为 SSO 就像在一个子域中登录,它会在其他任何地方登录......但我想根据用户选择从单个登录页面登录到子域的仪表板页面。

我是如何想到实现这个的(不工作):我将首先向https://example.com
发送“/authenticate”请求,并带有像我的 nodejs 后端将进行身份验证并返回 JWT 令牌之类的参数。现在我将重定向到该子域(https://abc.example.com)并将此令牌从https://example.com发送到https://abc.example.com
{ username: "alice", password: "****", subDomainUrl: "https://abc.example.com"}
并且它会以某种方式存储在这个子域的(https://abc.example.com)本地存储中。将其存储在本地存储中后,我可以轻松地完成其他工作。

那么如何实现呢?上述方法是否实用;如果那么如何正确地做到这一点?实现这类架构的最佳方式是什么?任何帮助都会很棒,谢谢!

标签: node.jsangularauthenticationjwtsingle-sign-on

解决方案


我建议您首先从https://example.com/发送 /authenticate 请求。它将由 nodejs 后端验证,然后生成 JWT 令牌并重定向到包含令牌的新子域。

http.get('*',function(req,res){  
    res.redirect('https://abc.example.com?token='+JWTtoken);
})

您可以从子域中获取令牌并存储在本地存储中。此外,您可以使用此令牌进行 api 身份验证。


推荐阅读