我有一个JWT,它在标头中发送,其键为“ X-JWT-Assertion ”。
一切顺利。我可以使用IAuthorizationFilter
对其进行成功验证。
然后我将IHttpContextAccessor
注入控制器,并检查User
属性(一个System.Security.Claims.ClaimsIdentity
)。尽管我的JWT有很多主张,但其中没有主张。
我的猜测是我的WSO2服务器正在以非标准标头名称发送JWT,因此.NET Core代码不知道它在那里。
我可以手动访问JWT以提出索赔,但我宁愿使用内置的.NET方法。
是否可以将JWT与IHttpContextAccessor.User
对象连接?
答案 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;
};
});