У меня есть служба Web API .NET Core 3.0. Он получает заголовок, содержащий JWT с утверждениями.
Я добавил следующее в ConfigureServices
в Startup.cs, чтобы сопоставить мой JWT с системой проверки подлинности .NET Core:
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(configureOptions =>
{
configureOptions.Events = new JwtBearerEvents()
{
OnMessageReceived = context =>
{
context.Token = context.HttpContext.Request.Headers["X-JWT-Assertion"];
return Task.CompletedTask;
}
};
});
Я также добавил app.UseAuthentication();
к Configure
в Startup.cs.
Затем я запускаю свою службу и вызываю для нее операцию HTTP GET. Когда я это делаю, я вижу, что context.Token
настроен на мой JWT. Если я перенесу этот JWT на https://JWT.io, это покажет, что у него много утверждений.
Но точка останова в операции GET показывает, что User.Claims
пусто. Чтокогда-либо необходимо подключить JWT к пользователю, не происходит.
Вот варианты, которые я пробовал:
- Добавить
[Authorize]
над моим контроллером:
Результат: 401 Ошибка: неавторизован - Добавить
[Authorize(JwtBearerDefaults.AuthenticationScheme)]
над моим контроллером
Результат: Поле AuthorizationPolicy с именем 'Bearer' не найдено. - Добавьте
services.AddAuthorization()
в ConfigureServices и [Authorize]
над моим контроллером
Результат: 401 Ошибка: неавторизовано - Добавьте
[Authorize(JwtBearerDefaults.AuthenticationScheme)]
над моим контроллером и кодом ниже для ConfigureServices:
services.AddAuthorization(auth =>
{
auth.AddPolicy(JwtBearerDefaults.AuthenticationScheme,
new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build());
});
Результат: 401 Ошибка: неавторизовано
Чтобы было ясно, я не хочу делать авторизацию, но я прочитал, что добавление может бытьнеобходимо сопоставить заявки с пользователем.
Что мне нужно сделать, чтобы получить свойство пользователя (которое является частьюбазового класса Controller), который будет заполнен моими утверждениями?