Проверка JWT с помощью внешних полномочий не работает. ASP .NET Core 3.0

#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. Рад, что вы нашли это!