使用浏览器获取请求发送 JWT 令牌

Posted

技术标签:

【中文标题】使用浏览器获取请求发送 JWT 令牌【英文标题】:Sending JWT token with browser get requests 【发布时间】:2019-04-05 10:06:42 【问题描述】:

我正在开发一个 java spring 安全应用程序,我想使用Json Web Token(JWT) 实现无状态身份验证。

在 ajax 请求的情况下,没有任何问题,我可以以这种格式在请求标头中发送生成的令牌:

Authorization: Bearer jwtHeader.jwtPayload.jwtSignature

问题是通过单击<a> 标签发送GET 请求。假设我有一个/my-orders url,负责获取一个普通的 html 页面,并且我想为经过身份验证的用户保护它。 当用户点击链接或直接在浏览器地址栏中粘贴api get url时,他的请求总是失败,因为get请求中没有jwt令牌。

有没有办法通过浏览器获取请求发送 jwt?

【问题讨论】:

【参考方案1】:

使用 XMLHttpRequest 可以将 Http 标头添加到 GET 请求,但不能将 http 标头添加到锚标记 GET 请求。

【讨论】:

【参考方案2】:

在标签的每个链接中添加 jwt 作为查询参数。

例如My Orders

<a href="/my-orders?jwt=eyJhbGNiJ9.eyJzdWIiOiIwIsH0.KsKmQOZM-jcy4l_7NFsrWn">My Orders</a>

并且在后端期望 get 或 post 请求的查询参数中的 jwt。

【讨论】:

感谢您的回复。但是在您的解决方案中,我需要手动打开 url 并验证 jwt 令牌,这意味着我忽略了 spring 安全规则。 我认为您不需要手动操作。尝试查看 BearerTokenExtractor 类及其 extractToken 方法的实现。在那里你会看到它正在寻找一个名为“access_token”的参数。

以上是关于使用浏览器获取请求发送 JWT 令牌的主要内容,如果未能解决你的问题,请参考以下文章

将 jwt 令牌添加到 GET 请求在 React 中不起作用

用于 JWT 刷新令牌的 react-native 中的 httpOnly cookie

使用带有 JWT Auth/Laravel 的 Angular JS 获取新的刷新令牌后,如何恢复/重新发送请求?

刷新后如何使以前的 JWT 令牌无效

我需要添加啥以及将 JWT 令牌发送到浏览器标头的位置?

如何在 Angular 4 中处理安全会话