. Net Базовому веб-API не удалось проверить запросы с помощью IdentityServer после преобразования из http в https - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть приложение IdentityServer 3, которое заботится об аутентификации / авторизации и проверке токена. У нас есть. net core 3.0 web api, который обрабатывает функции управления пользователями и ролями посредством запросов, поступающих из приложения angular js на клиентской стороне. В мире http все работало нормально. Как только мы начали использовать самозаверяющий сертификат и превратили все эти приложения (IdentityServer3, Net Базовое приложение (которое взаимодействует с IdentityServer для вещей, связанных с идентификацией пользователя и проверкой токенов) и angular js) с HTTPS на IIS. Мы начали сталкиваться с проблемой, так как identityserver3 помогает аутентификации пользователей, но позже, когда пользовательский интерфейс (angular приложение) пытается отправить запрос GET в. net основное приложение, которое обычно получает данные вошедшего в систему пользователя, не работает, Это. net ядро ​​приложения взаимодействует с IdentityServer для каждого веб-API-запроса для проверки токена, оно выдает ошибку 404. Ниже приведена ошибка из журналов.

04/16/2020 14: 15: 59.335 -04: 00 [Ошибка] IDX20803: Невозможно получить конфигурацию из: '[PII скрыт. Для получения дополнительной информации см. https://aka.ms/IdentityModel/PII.] '. System.InvalidOperationException: IDX20803: Невозможно получить конфигурацию из: '[PII скрыт. Подробнее см. https://aka.ms/IdentityModel/PII.] '. ---> System.IO.IOException: IDX20804: невозможно получить документ из: '[PII скрыт. Подробнее см. https://aka.ms/IdentityModel/PII.] '. ---> System. Net .Http.HttpRequestException: не удалось установить соединение SSL, см. Внутреннее исключение. ---> System.Security.Authentication.AuthenticationException: удаленный сертификат недействителен в соответствии с процедурой проверки. в System. Net .Security.SslStream.StartSendAuthResetSignal (сообщение ProtocolToken, AsyncProtocolRequest asyncRequest, исключение ExceptionDispatchInfo) в System. SslStream.StartSendBlob (входящий Byte [], счетчик Int32, AsyncProtocolRequest asyncRequest) в System. Net .Security.SslStream.ProcessReceivedBlob (буфер Byte [], количество Int32, AsyncProtocolRequest asyncRequest * .Sec .Sec.) .Sec. StartReadFrame (буфер Byte [], readBytes Int32, asyncProtocolRequest asyncRequest) в System. Net .Security.SslStream.StartReceiveBlob (буфер Byte [], asyncProtocolRequest asyncRequest) в System. Net. AsyncProtocolRequest asyncRequest) в System. Net .Security.SslStream.StartSendBlob (Byte [] входящий, число Int32, AsyncProtocolRequest asyncRequest) в System. Net .Securit y.SslStream.ProcessReceivedBlob (буфер Byte [], число Int32, AsyncProtocolRequest asyncRequest) в System. Net .Security.SslStream.StartReadFrame (буфер Byte [], int32 readBytes, AsyncProtocolRequest asyncReecest. SslStream.StartReceiveBlob (буфер Byte [], AsyncProtocolRequest asyncRequest) в System. Net .Security.SslStream.CheckCompletionBeforeNextReceive (сообщение ProtocolToken, AsyncProtocolRequest asyncRequest) в качестве объекта .Sync.Sec. count, AsyncProtocolRequest asyncRequest) в System. Net .Security.SslStream.ProcessReceivedBlob (буфер Byte [], Int32 count, AsyncProtocolRequest asyncRequest) в System. Net .Security.SslStream.StartReadFrates, read32 AsyncProtocolRequest asyncRequest) в System. Net .Security.SslStream.PartialFrameCallback (AsyncProtocolRequest asyncRequest) --- Конец трассировки стека из предыдущего расположения, где было сгенерировано исключение --- в System. Net .Security.SslStream. ThrowIfExceptional () для System. Net .Security.SslStream.InternalEndProcessAuthentication (LazyAsyncResult lazyResult) в System. Net .Security.SslStream.EndProcessAuthentication (результат IAsyncResult. ) в системе. Net .Security.SslStream. <> c .b__65_1 (IAsyncResult iar) в System.Threading.Tasks.TaskFactory 1.FromAsyncCoreLogic(IAsyncResult iar, Func 2 endFunction, действие 1 endAction, Task 1 обещание, Boolean требуетSynchronization) --- Конец трассировки стека из предыдущего местоположения, где было сгенерировано исключение - - at System. Net .Http.ConnectHelper.EstablishSslConnectionAsyncCore (Поток потока, SslClientAuthenticationOptions sslOptions, CancellationToken cancellationToken) --- Конец трассировки стека внутренних исключений --- в System. Net .Http.ConnectHelpersCoreSoreSecore Поток, SslClientAuthenticationOptions sslOptions, CancellationToken cancellationToken) в System. Net .Http.HttpConnectionPool.ConnectAsyn c (запрос HttpRequestMessage, логический allowHttp2, CancellationToken * HackdownRegnTectionPhttp). request, CancellationToken cancellationToken) в System. Net .Http.HttpConnectionPool.GetHttpConnectionAsyn c (запрос HttpRequestMessage, CancellationToken cancell ationToken) в System. Net .Http.HttpConnectionPool.SendWithRetryAsyn c (запрос HttpRequestMessage, Boolean doRequestAuth, CancellationToken cancellationToken) в System. Net .Http.RedirectHandtationTegnTokenToken (66). System. Net .Http.DiagnosticsHandler.SendAsyn c (запрос HttpRequestMessage, CancellationToken cancellationToken) в System. Net .Http.HttpClient.FinishSendAsyncBuffered (задача 1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts) at Microsoft.IdentityModel.Protocols.HttpDocumentRetriever.GetDocumentAsync(String address, CancellationToken cancel) --- End of inner exception stack trace --- at Microsoft.IdentityModel.Protocols.HttpDocumentRetriever.GetDocumentAsync(String address, CancellationToken cancel) at Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectConfigurationRetriever.GetAsync(String address, IDocumentRetriever retriever, CancellationToken cancel) at Microsoft.IdentityModel.Protocols.ConfigurationManager 1. Отмена отмены настройки) - Конец внутренней трассировки стека исключений --- в Microsoft.IdentityModel.Protocols.ConfigurationManager 1.GetConfigurationAsync(CancellationToken cancel) at Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler.HandleAuthenticateAsync() at Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler.HandleAuthenticateAsync() at Microsoft.AspNetCore.Authentication.AuthenticationHandler 1.AuthenticateAsyn c () в Microsoft.AspNetCore.Authentication.AuthenticationService.AuthenticateAsyn c (контекст HttpContext, схема String) в IdentityServer4.AccessTokenValidation.IdentityServerAuthenticationHandler.HandleAuthenticateAsyn c () 16.04.2020 14: 15: 59.336 -04: 00 [Информация] «Носитель» не был аутентифицирован. Сообщение об ошибке: "IDX20803: невозможно получить конфигурацию из: '[PII скрыт. Для получения дополнительной информации см. https://aka.ms/IdentityModel/PII.] '." 16.04.2020 14: 15: 59.338 -04: 00 [Информация] «Носитель» не был аутентифицирован. Сообщение об ошибке: "IDX20803: невозможно получить конфигурацию из: '[PII скрыт. Для получения дополнительной информации см. https://aka.ms/IdentityModel/PII.] '."

1 Ответ

0 голосов
/ 22 апреля 2020

Я получил эту ошибку при обращении к URL-адресу: https: // [ваш сервер] /.well-known/openid-configuration для получения конфигураций OpenId.

  1. Проверьте, действительны ли ваши сертификаты https.
  2. Проверьте, доверяет ли ваш сертификат https вашему API-серверу (если это самозаверяющий сертификат - используйте специальный ЦС для создания и доверия этому ЦС на вашем API-сервере)
  3. Проверьте, используя CURL, разрешен ли трафик c между вашим контейнером / сервером и сервером идентификации. В моем случае возникла ситуация, когда межсетевой экран CentOS блокировал трафик c между моими контейнерами и моим интерфейсом publi c. Я решил создать соответствующие правила брандмауэра для этого трафика c.

. Лучший способ проверить это: Попробуйте использовать инструмент командной строки: "curl", чтобы получить URL-адрес сервера идентификации HTTPS из вашего API. Сервер или контейнер. Вы не можете получить ошибку (сертификат, имя сервера сертификатов).

...