.NET Core 2.1 中的 HttpContext.GetTokenAsync 无法检索 JWT
JWT cannot be retrieved by HttpContext.GetTokenAsync in .NET Core 2.1
这个真的让我挠头,因为我可以创建一个 JWT。我可以添加一个属性来授权控制器,看看我是否不添加 'Authorization' 'Bearer (token)' 到 header 它会 return 401 未经授权。然而,像获取令牌字符串以获取其有效负载声明这样简单的操作是行不通的。
所以这很好用:
var token = Request.Headers["Authorization"];
这不是:
var token2 = await HttpContext.GetTokenAsync(JwtBearerDefaults.AuthenticationScheme, "access_token");
我已经更改了签名,像这样在启动时连接了 IHTTPContextAccessor:
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
我可以看到 IHttpContextAccessor 有值,还有授权密钥。我可以发誓这曾经在 .NET Core 2.0 中很容易工作,但现在不行了。启动或程序中是否缺少一个简单的连接?此时我将只从 Request.Headers 获取数据。但这感觉就像一个黑客。
这似乎是 ASP.NET Core 2.1 中的一个 known issue(已在即将发布的 2.2 中修复)。关于我链接的 GitHub 问题的建议是从 header 中提取值,就像您在问题中所做的那样。一旦 2.2 发布并且您可以升级,您应该可以恢复使用 HttpContext.GetTokenAsync
.
这个真的让我挠头,因为我可以创建一个 JWT。我可以添加一个属性来授权控制器,看看我是否不添加 'Authorization' 'Bearer (token)' 到 header 它会 return 401 未经授权。然而,像获取令牌字符串以获取其有效负载声明这样简单的操作是行不通的。
所以这很好用:
var token = Request.Headers["Authorization"];
这不是:
var token2 = await HttpContext.GetTokenAsync(JwtBearerDefaults.AuthenticationScheme, "access_token");
我已经更改了签名,像这样在启动时连接了 IHTTPContextAccessor:
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
我可以看到 IHttpContextAccessor 有值,还有授权密钥。我可以发誓这曾经在 .NET Core 2.0 中很容易工作,但现在不行了。启动或程序中是否缺少一个简单的连接?此时我将只从 Request.Headers 获取数据。但这感觉就像一个黑客。
这似乎是 ASP.NET Core 2.1 中的一个 known issue(已在即将发布的 2.2 中修复)。关于我链接的 GitHub 问题的建议是从 header 中提取值,就像您在问题中所做的那样。一旦 2.2 发布并且您可以升级,您应该可以恢复使用 HttpContext.GetTokenAsync
.