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 请求发送身份验证标头

Auth0 JWT 插件和 ionic2 - 无授权标头发送

与 qtwebkit 请求一起发送自定义标头

如何强制 axios GET 请求发送标头?

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