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

时间:2019-10-25 21:56:14

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

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

一切顺利。我可以使用IAuthorizationFilter对其进行成功验证。

然后我将IHttpContextAccessor注入控制器,并检查User属性(一个System.Security.Claims.ClaimsIdentity)。尽管我的JWT有很多主张,但其中没有主张。

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

我可以手动访问JWT以提出索赔,但我宁愿使用内置的.NET方法。

是否可以将JWT与IHttpContextAccessor.User对象连接?

1 个答案:

答案 0 :(得分:2)

首先,您无需向控制器注入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;
        };
    });