【问题标题】:How can I send a JWT token to an external URL?如何将 JWT 令牌发送到外部 URL?
【发布时间】:2023-03-27 05:10:01
【问题描述】:

我有两个 REST 端点。

  1. accounts.mydomain.com/login - 身份提供者在用户通过其用户名/密码进行身份验证后发送 JWT 令牌作为响应。
  2. api.mydomain.com/users - 接受上述 JWT 令牌作为 Authorization 标头,验证它并在令牌有效时发送用户 JSON 作为响应。

我已经使用 Angular2 创建了我的 UI

  1. myservice.mydomain.com 的登录页面,捕获用户名/密码和 POSTs 到其余端点的凭据 accounts.mydomain.com/login 并获取 JWT 令牌作为响应。收到 JWT 令牌后,将显示以下页面。
  2. users.mydomain.com 的用户主页。仅当上述 JWT 令牌已针对其余端点 api.mydomain.com/users 进行验证时,才应显示此页面。

虽然我会使用 window.location.href 将登录页面响应中的 JWT 令牌发送到 users.mydomain.com?t=JWTtoken,并从查询参数中获取令牌以将其作为 Authorization 标头发送到 api.mydomain.com/users

我知道,如果 JWT 令牌大小增加,在查询参数中发送令牌是不好的。

谁能建议我一个更好的方法来实现上述要求?是否可以在标头中发送 JWT 令牌而不是查询参数?

【问题讨论】:

    标签: angular jwt url-redirection


    【解决方案1】:

    绝对可以将 JWT 令牌作为标头发送。在Angular2 中,您有一组可以扩充的请求 API 标头。 Angular2 似乎没有拦截,但您始终可以在 HTTP 客户端之上编写自己的包装器来存储令牌并将其附加到标头中的每个请求。

    这实际上是将 JWT 令牌或任何其他令牌传递给 API 的最常见方式(您也可以在 cookie 中发送它,例如,但出于可维护性和安全性等各种原因,我更喜欢标头)。

    这是设置标题的方式:

    import {Headers} from 'angular2/http';
    var headers = new Headers();
    headers.append(headerName, value);
    
    // HTTP POST using these headers
    this.http.post(url, data, {
      headers: headers
    })
    

    您可以在here 中阅读有关包装器的更多信息。

    【讨论】:

      猜你喜欢
      • 2019-01-06
      • 2020-12-14
      • 2020-06-08
      • 1970-01-01
      • 2021-01-17
      • 2022-09-28
      • 2015-02-10
      • 2021-08-18
      • 1970-01-01
      相关资源
      最近更新 更多