Аутентификация между компьютерами - неверная конечная точка валидации - PullRequest
0 голосов
/ 28 апреля 2020

Я использую ASP. NET Core 3.1 с идентификатором Ping в качестве органа. Я использую промежуточное программное обеспечение JwTbearer (с использованием Microsoft.AspNetCore.Authentication.JwtBearer;)

В настоящее время у меня есть пример API, запущенный и работающий с использованием ASP. NET Core, и заблокировал его с помощью [Авторизовать] , Моя проблема возникает, когда я передаю токен-носитель в API, и он пытается в режиме онлайн проверить токен с помощью Ping.

Я получаю это сообщение об ошибке:

"info: Microsoft.AspNetCore.Authentication. JwtBearer.JwtBearerHandler [1] Не удалось проверить токен. Microsoft.IdentityModel.Tokens.SecurityTokenSignatureKeyNotFoundException: IDX10501: Сбой проверки подписи. Невозможно сопоставить ключ: kid "

Для конечного клиента это сообщение не возвращается, так как 4 возвращается к сообщению, которое не возвращается как возвращаемое как сообщение 4 .

При отладке кода, который я увидел, промежуточное программное обеспечение было:

  1. , связанное с конечной точкой /.well-known/openid-configuration (что правильно)
  2. используя информацию, полученную от вышеуказанной конечной точки, чтобы связаться с конечной точкой / pf / JWKS

На этом этапе происходит сбой с указанным выше сообщением об ошибке. Я пошел ко второй конечной точке и искал ребенка, его не было.

В этот момент я пошел к нашим архитекторам Ping и спросил их, почему у них нет нашего ребенка с открытым ключом c в этой конечной точке их ответом было использование /as/introspect.oauth2, и именно это используют большинство других приложений здесь.

Мои два вопроса:

1) Поскольку промежуточное ПО обнаружив, что кажется нам неправильной конечной точкой, как я могу переопределить ее, чтобы она использовала правильную?

2) Конечной точке самоанализа требуется отправить ключ авторизации с Basi c и секретным закодированным используя BASE64, как бы это реализовать? Я вижу, что IdentityServer4.AccessTokenValidation поддерживает это с секретом options.api, но я не вижу ничего похожего с JwtBearer.

Если я загружаю сертификат органа publi c малыша из органа и делаю локальную проверку, которая работает нормально , но мы хотим использовать онлайн-проверку.

Код, который я использую следующим образом:

services.AddAuthentication(
                options =>
                {
                     options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                     options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;

                })

// I will be putting the authority and audience values into the appsettings.json file and pulling it from there before this goes live

.AddJwtBearer(options =>
          {
              options.Authority = "https://myAuthority....";
              options.Audience = "https://myAudience...";
              options.MetadataAddress = "https://myAuthority.../.well-known/openid-configuration";
           // I configured this backchannel handler so I could see what it was passing to the authority easily.

options.BackchannelHttpHandler = new AuthorizingHandler(innerHandler, headerValue);

}


...

 app.UseRouting();
            app.UseAuthentication();
            app.UseAuthorization();

et c ....

AuthorizingHandler:

public AuthorizingHandler(HttpMessageHandler inner, string headerValue)
            : base(inner)
        {
            _headerValue = headerValue;
        }

        protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            request.Headers.Add("Authorization", _headerValue);
            return base.SendAsync(request, cancellationToken);
        }

Я использую client_credential flow для запроса токена доступа у Ping с помощью Postman, возвращение которого выглядит примерно так:

"access_token": "eyedwedwed ........ et c "," token_type ":" Bearer "," expires_in ": 3599

Любая помощь будет наиболее ценной, так как я рву на себе волосы с этим!

Спасибо, Маркус

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...