【问题标题】:Angular 2+ redirect to a url with a tokenAngular 2+ 重定向到带有令牌的 url
【发布时间】:2021-03-19 11:41:59
【问题描述】:

我正在使用 Angular 9。我想做类似的事情,但出于安全原因不想公开令牌。

<a href="https://url?jwt=xxx">

window.location.href = "https://url?jwt=xxx";

所以因为这两个选项不是一个好主意,有没有办法重定向到一个 url 并将令牌添加到 header 中?还是有其他可行的方法?

更多信息:

在我的用例中,我想将用户重定向到不同的 url。为了访问 url,托管它的服务器需要 jwt 对用户进行身份验证。

【问题讨论】:

  • 添加可在服务器上读取的 cookie 是否可行?

标签: javascript angular


【解决方案1】:

您不应在 URL 中发送您的 JWT。相反,您可以将您的令牌添加到windows.localstorage。像这样

localStorage.setItem('token', jwt);

$window.localStorage.token = JSON.stringify(jwt);

参考https://stackoverflow.com/a/44209185/8826642

参考https://stackoverflow.com/a/44320933/8826642

【讨论】:

  • 嗨@theWellHoper,感谢您的回答,但这不是我要问的。我知道我不能暴露令牌。我想重定向到另一个 url 并安全地传递令牌。我不需要将令牌存储在浏览器上,而是将其传递到我需要重定向到的位置(即服务器)。因此,例如,如果我可以在标题中设置它,那将是一个可行的选择(但我不确定这是否可能)。
【解决方案2】:

在 Angular 2 中导航并添加查询参数

在 HTML 中:

<a [routerLink]="['urlToNavTo']" [queryParams]="{jwt: tokenValue}"> link title </a>

或者在组件的TS中:

import {Router} from "@angular/router"

constructor(private router: Router) {}

this.router.navigate(['urlToNavTo'], {queryParams: {jwt: tokenValue}});

希望这是您所需要的。

【讨论】:

  • 感谢您的回答。但是,这不会暴露url中的参数吗?
  • 是的,但它总是暴露在外(即使在标题中),这就是它被加密的原因。如果您切换域,将其保存在本地存储中将无济于事。其他选项是通过会话 id 发送(在服务器中管理)
  • 你对添加带有token的cookie,然后服务器读取cookie有什么看法?
  • 服务器读取cookie?我可能弄错了,但 cookie 是为客户准备的。你将如何让服务器访问它?
  • 在 Java 中你可以这样做:Cookie[] cookies = request.getCookies();
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-25
  • 1970-01-01
相关资源
最近更新 更多