在重定向到新的SPA页面时在标头中传递身份验证令牌

问题描述 投票:0回答:1

假设这些:

       A -----------------------> B
(Sender website)          (Angular website)

我们实现了普通的Angular SPA (B),其index.html和其他资源仅托管在IIS中,并且有一条简单的重写规则可用于处理Angular中的路由。 Angular中的用户需要登录,他们获得JWT令牌并将其存储在浏览器存储中。

有一个网站(A)想要将用户重定向到Angular网站,但我们也希望将JWT令牌也从A传递到B,因为令牌是相同的,并且我们希望阻止用户登录再次。

网站A重定向到B时,可以在post request头中发送令牌。问题是JS(Angular)无法直接获取头参数,因为它们正在发送到IIS。

问题:

  1. IIS中有一种方法,我们可以从请求中获取令牌,并在检索index.html时将其设置为html属性?因此,JS可以检查它的html元素并找到令牌。

  2. 以上技术正确吗?如果没有,可以请您提出建议吗?

angular iis jwt http-post html-injections
1个回答
0
投票

我对此的思考过程将是使用查询参数或路由参数将用户重定向到角度页面。这同样安全/不安全,因为任何人都可以看到标头值(如果您担心将JWT暴露给最终用户,则可以使用。)>

我会让您的登录页面接受JWT(或您要重定向到的任何页面)

所以,假设您https://myangularsite.com/login?jwt=JWTTOKEN

然后,您可以在登录页面中,从URL中获取该JWT令牌

const jwt = ActivatedRoute.snapshot.queryParamMap.get('jwt');

现在,您可以将该值放入localStorage

localStorage.setItem('jwt', jwt);

然后,在Angular中,只需创建一个HttpInterceptor即可从localStorage中获取该JWT令牌,并将其应用于每个请求的标头:

const jwt = localStorage.getItem('jwt');
const request = req.clone({ withCredentials: true, headers: jwt });

您可以将其视为与注册某些服务时一样的事情,他们会通过电子邮件向您发送链接以确认您的电子邮件。您单击的链接将通过电子邮件确认令牌将您带回到他们的站点。当您使用该令牌访问该网站时,它会从该令牌知道您是谁。

例如:http://facebook.com/confirm?token=emailconfirmtoken

© www.soinside.com 2019 - 2024. All rights reserved.