Auth 标头未与 GET 请求一起发送
Posted
技术标签:
【中文标题】Auth 标头未与 GET 请求一起发送【英文标题】:Auth header not being sent with GET requests 【发布时间】:2018-08-14 23:02:06 【问题描述】:我目前有 express-jwt 设置并使用 Auth0。如果您在 curl 或 postman 中指定授权令牌,则页面会正确加载。如果您使用浏览器,express-jwt 中间件会说没有提供令牌,如果我检查请求标头,则没有任何身份验证标头。
真的让我大吃一惊,谢谢 ~ 顺便跑个快递
**edit,例如添加了我一直在使用的代码。不知道还有什么必要的。它只是一个带有 JWT auth 的简单 React 应用程序。
exports.getTokenData = async function (req)
try
if (req.headers.authorization && req.headers.authorization.split(' ')[0] === 'Bearer')
let token = req.headers.authorization.split(' ')[1];
if (!token) return false;
let res = await axios(
method: 'get',
url: 'https://xelitexirish.eu.auth0.com/userinfo',
headers: Authorization: `Bearer $token`
);
return res.data;
else return false;
catch (err)
console.error(`Unable to fetch jwt data, Error: $err.stack`);
;
谢谢
【问题讨论】:
分享一些代码就好了 Auth0 Dev 在这里,你不应该调用/userinfo
只是为了获取用户信息和验证令牌,JWT 使用规范隐式验证并且可以被解码。
【参考方案1】:
浏览器只会为任何给定的 HTTP 请求发送“标准”标头——我的意思是,当您在 Postman / cURL 中添加标头时,您明确告诉 HTTP 客户端(Postman / cURL)发送此请求的标头。当您在浏览器上打开 URL 时,没有人会告诉浏览器它应该随请求一起发送您的自定义标头。
您可以通过在 Chrome 上安装 mod_header 并为浏览器请求添加您的自定义标头来临时实现此功能,但在现实世界的应用程序中,令牌通常存储在 cookie 或 localStorage 中。
【讨论】:
以上是关于Auth 标头未与 GET 请求一起发送的主要内容,如果未能解决你的问题,请参考以下文章
使用 OPTIONS 方法未使用 http 请求 Angular 6 发送授权标头
如何在 ASP.Net 中为一组 Web 请求发送身份验证标头