.NET Core 2.1中的HttpContext.GetTokenAsync无法检索JWT

dja*_*azz 5 c# access-token jwt asp.net-core asp.net-core-2.1

当我可以创建JWT时,这确实让我抓狂了。我可以添加一个属性来授权控制器,然后查看是否不向标题添加“ Authorization”“ Bearer(token)”,它将返回未经授权的401。但是,像获取令牌的字符串来获取其有效负载声明这样的简单操作不起作用。

所以这很好用:

var token = Request.Headers["Authorization"];
Run Code Online (Sandbox Code Playgroud)

这不是:

var token2 = await HttpContext.GetTokenAsync(JwtBearerDefaults.AuthenticationScheme, "access_token");
Run Code Online (Sandbox Code Playgroud)

我已经更改了签名,像这样在启动时连接了IHTTPContextAccessor:

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
Run Code Online (Sandbox Code Playgroud)

我可以看到IHttpContextAccessor具有值以及授权密钥。我本可以发誓过去在.NET Core 2.0中可以轻松工作,但现在却不行。我在“启动”或“程序”中是否缺少简单的连接?此时,我将仅从Request.Headers中获取数据。但这就像黑客一样。

Kir*_*kin 5

这似乎是ASP.NET Core 2.1 中的一个已知问题(在即将发布的 2.2 中修复)。关于我链接的 GitHub 问题的建议是从标题中提取值,就像您在问题中所做的那样。一旦 2.2 发布并且您能够升级,您应该能够恢复使用HttpContext.GetTokenAsync.

  • Tratcher 确认 [在链中进一步向下](https://github.com/aspnet/Security/issues/1765#issuecomment-391421135) HaoK 的方法也不起作用,仅供参考。 (2认同)