将我的 JWT 连接到 .NET Core 的 IHttpContextAccessor.User

Connect my JWT to .NET Core's IHttpContextAccessor.User

我有一个在 header 中发送的 JWT,它们的键是“X-JWT-Assertion”。

它到了就好了。我可以使用 IAuthorizationFilter.

成功验证它

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

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

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

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

首先,您不需要将 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;
        };
    });