如何使用JS跳转至其他网站并同时发送JWT作为Bearer Token
你的方法无法实现需求
你贴的这段代码存在关键问题:
- 首先,XMLHttpRequest请求确实会带着你设置的
Authorization头去请求redirectUrl,但这只是一次独立的AJAX请求,和之后的页面跳转没有关联。 - 当你执行
window.location.replace(redirectUrl)时,浏览器会发起一个全新的GET请求跳转到目标地址,这个请求不会携带之前AJAX请求里的Authorization头,等于前面的XHR请求完全白做了。
可行的实现思路
要在跳转时携带JWT,常见的靠谱方案有两种:
- 将JWT放入URL参数(不推荐敏感场景)
这种方式会让JWT暴露在URL、浏览器历史和服务器日志中,仅适用于非敏感业务:
window.location.replace(`${redirectUrl}?token=${encodeURIComponent(token)}`);
目标网站需要从URL参数中提取token进行验证。
- 通过后端返回重定向并设置Cookie(推荐)
如果目标网站和当前站点属于同一域名,或支持跨域Cookie配置,可以让你发起XHR请求的后端服务返回3XX重定向响应,同时在响应头中设置携带JWT的HttpOnly Cookie。浏览器跳转时会自动携带该Cookie到目标网站,目标站点从Cookie中读取JWT即可验证。
示例后端响应逻辑(伪代码):
HTTP/1.1 302 Found Location: https://目标网站地址 Set-Cookie: jwt=Bearer ${token}; Path=/; Domain=共同域名; HttpOnly; Secure
总结
你原来的代码本质是先做了一次带token的AJAX请求,又发起了一次不带token的页面跳转,两次请求毫无关联,完全实现不了“跳转时发送JWT”的需求。建议根据业务场景选择上面两种方案之一。
内容的提问来源于stack exchange,提问作者Ramin Zahedi
相关产品推荐
相关产品推荐

