将我的 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;
};
});
我有一个在 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;
};
});