使用浏览器获取请求发送 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