#asp.net-core #identityserver4 #jwt-auth
#asp.net-core #identityserver4 #jwt
Вопрос:
Я пытаюсь авторизовать свои запросы с помощью внешней службы с IdentityServer4. Я использую следующий код
services.AddAuthentication("Bearer")
.AddJwtBearer("Bearer", options =>
{
options.Authority = Configuration["IdentityUrl"];
options.RequireHttpsMetadata = false;
options.Audience = "myapi";
});
Я получил свой токен с помощью token client
var tokenResponse = await tokenClient.RequestPasswordTokenAsync(
new PasswordTokenRequest
{
ClientId = clientId,
ClientSecret = clientSecret,
GrantType = GrantTypes.Password,
Address = discoveryDocument.TokenEndpoint,
UserName = user.UserName,
Password = user.PasswordHash,
});
Он работает и выдает мне токен, но затем, когда я пытаюсь авторизовать любой запрос, включив этот токен в заголовок авторизации, он выдает мне 401 без объяснения причин. Я ничего не вижу в выходных данных ни серверного приложения identity, ни моего клиентского приложения.
Это то, что я делаю в postman для проверки авторизации
Есть идеи о том, что не так и как это отладить?
Ответ №1:
Попробуйте посмотреть, что говорится в журналах?
Или попробуйте установить для этого значение true в параметрах AddJwtBearer, а затем просмотрите ответ от API, чтобы узнать, содержит ли он какие-либо дополнительные сведения о сбое.
options.IncludeErrorDetails = true;
Если это сработает, вы должны увидеть дополнительный заголовок WWW-authenticate, подобный этому:
HTTP/1.1 401 Unauthorized
Date: Sun, 02 Aug 2020 11:19:06 GMT
WWW-Authenticate: Bearer error="invalid_token", error_description="The signature is invalid"
В дополнение к этому ответу я написал сообщение в блоге, в котором более подробно рассматривается эта тема:
Устранение проблем с аутентификацией JwtBearer в ASP.NET Ядро
Комментарии:
1. Спасибо, это действительно сработало — в моем случае ошибка invalid_scope была вызвана некоторыми неправильными настройками клиента сервера indentity в базе данных
2. Рад, что вы нашли это!