【问题标题】:Connect my JWT to .NET Core's IHttpContextAccessor.User将我的 JWT 连接到 .NET Core 的 IHttpContextAccessor.User
【发布时间】:2020-02-22 06:14:54
【问题描述】:

我有一个在标头中发送的 JWT,其密钥为“X-JWT-Assertion”。

它到达就好了。我可以使用IAuthorizationFilter 成功验证它。

然后我将IHttpContextAccessor 注入我的控制器并检查User 属性(System.Security.Claims.ClaimsIdentity)。尽管我的 JWT 有很多声明,但它没有声明。

我的猜测是我的 WSO2 服务器正在以非标准标头名称发送 JWT,因此 .NET Core 代码不知道它在那里。

我可以手动访问 JWT 来获取我的声明,但我宁愿使用内置的 .NET 方法。

有什么方法可以将我的 JWT 与 IHttpContextAccessor.User 对象连接起来吗?

【问题讨论】:

  • 请发布您的Startup.cs 代码,用于配置您的应用程序的身份验证和授权。使用 IAuthorizationFilter 不会自动将 JWT 声明映射到 ClaimsPrincipal 声明。此外,ASP.NET Core 具有内置的 JWT 声明映射,通常需要清除它们,因为它们无用且适得其反:leastprivilege.com/2016/08/21/…

标签: asp.net-core .net-core jwt .net-core-3.0 asp.net-core-3.0


【解决方案1】:

首先,您无需将IHttpContextAccessor 注入控制器即可访问用户。 Controller 已经有一个 User 属性。

其次,您需要在 startup.cs 中添加 jwt 身份验证,然后更改它从事件中读取令牌的方式。

services.AddAuthentication()
    .AddJwtBearer(configureOptions =>
    {
        configureOptions.Events.OnMessageReceived = context =>
        {
            context.Token = context.HttpContext.Request.Headers["X-JWT-Assertion"];
            return Task.CompletedTask;
        };
    });  

【讨论】:

猜你喜欢
  • 2021-06-21
  • 1970-01-01
  • 2018-01-22
  • 1970-01-01
  • 2021-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-19
相关资源
最近更新 更多