Ошибки авторизации на веб-интерфейсе сервиса подписи
Опубликовано Андрей Солдатов on 2021-05-09 12:13

Типовые ошибки при попытке выполнения авторизации на веб-интерфейсе сервисиса подписи.

1. "OpenIdConnectMessage. Error was not null, indicating an error, Error: 'unauthorized_client'. Error_Description (may be empty): 'The provided credentials of type 'SharedSecret' are invalid'. Error_uri (may be empty): 'error_uri is null'."

Диагностика:
Ошибка в «Журналы приложений и служб -> CryptoPro-> DSS-> IdentityService-> Admins». 

Пример:
Source: ClientCredentialsValidator.
The credentials of type 'SharedSecret' with value 'secret_value' is not registered for client with id 'cryptopro.dss.frontend.frontend'.

Возможные причины возникновения ошибки:
В настройках доступа по OpenId Connect веб-интерфейса указано значение секрета, не соответствующее зарегистрированному для oauth-клиента центра идентификации.

Рекомендуемое решение:
- Отобразить список значений секретов для oauth-клиента центра идентификации (по умолчанию: cryptopro.dss.frontend.frontend), выполнив командлет: Get-DssClientSecret -ClientId cryptopro.dss.frontend.frontend|fl
- Указать значение действующего секрета: Set-DssFeOidcSettings -ClientSecret <Значение секрета, полученное на прошлом шаге>
- Перезапустить пул приложения веб-интерфейса: Restart-DssFeInstance

2. unauthorized_client

Диагностика:
Ошибки в «Журналы приложений и служб -> CryptoPro-> DSS-> IdentityService-> Admins». 

Примеры:

А) Source: ClientValidator.
The credentials for the client with id 'cryptopro.dss.frontend.frontend' of a type 'SharedSecret' is invalid. Error 'unauthorized_client'. Additional info: [The provided credentials of type 'SharedSecret' expired at 'expiration_date'.]

Б) Source: AuthorizeRequestValidator.
The 'client_id' parameter in the request is invalid. No registered client with id 'cryptopro.dss.frontend.frontends is found.'

В) Source: AuthorizeRequestValidator.
The request is invalid. The client with id 'cryptopro.dss.frontend.frontend' is not allowed to use 'AuthorizationCode' flow.

Возможные причины возникновения ошибки:
- В настройках доступа по OpenId Connect веб-интерфейса указано значение секрета с истекшим сроком действия;
- В настройках доступа по OpenId Connect веб-интерфейса указан идентификатор oauth-клиента, который не зарегистрирован на центре идентификации;
- В списке допустимых для oauth-клиента сценариев отсутствует сценарий "AuthorizationCode".

Рекомендуемое решение:

А) Проверка сроков действия секретов и генерация новых:
- Отобразить список значений секретов для oauth-клиента центра идентификации (по умолчанию: cryptopro.dss.frontend.frontend), выполнив командлет: Get-DssClientSecret -ClientId cryptopro.dss.frontend.frontend|fl
- Если сроки действия всех секретов истекли - сгенерировать новый секрет: Set-DssClient -ClientId cryptopro.dss.frontend.frontend -GenerateSecret -SecretLifetime 0
- Получить значение нового секрета: $secret = (Get-DssClientSecret -ClientId cryptopro.dss.frontend.frontend).value
Указать значение нового секрета в настройках доступа по OpenId Connect веб-интерфейса: Set-DssFeOidcSettings -ClientSecret $secret
- Перезапустить пул приложения веб-интерфейса: Restart-DssFeInstance
- Перезапустить пул приложения центра идентификации: Restart-DssStsInstance 

Б) Проверка корректности указанного в настройках доступа по OpenId Connect веб-интерфейса идентификатора oauth-клиента центра идентификации:
- Выполнить командлет: (Get-DssFeOidcSettings).ClientId
- Убедиться, что клиент с идентификатором, полученным на прошлом шаге, есть в списке зарегистрированных на стороне центра идентификации. Идентификаторы клиентов можно получить, выполнив командлет: (Get-DssClient).ClientId
- Если клиент не зарегистрирован - выполнить настройку в соответствие с примером.

В) Добавить для oauth-клиента необходимые сценарии использования:
- Выполнить командлет: Set-DssClient -ClientId ((Get-DssFeOidcSettings).ClientId) -AllowedFlow AuthorizationCode,ClientCredentials,TokenExchange
- Перезапустить пул приложения центра идентификации: Restart-DssStsInstance

3. Страница не найдена

Диагностика:
Ошибка в «Журналы приложений и служб -> CryptoPro-> DSS-> Frontend-> Admins».

Пример:
Ошибка в Веб-приложении:
The controller for path '/DssTest/oauth/authorize' was not found or does not implement IController.
System.Web.HttpException: The controller for path '/DssTest/oauth/authorize' was not found or does not implement IController.

Возможные причины возникновения ошибки:
В настройках доступа по OpenId Connect веб-интерфейса указаны некорректные адреса сервисов.

Рекомендуемое решение:
Выполнить настройку доступа по OpenId Connect веб-интерфейса, в соответствие с примером.

4. «Запрос HTTP запрещен для схемы аутентификации клиентов "Anonymous"

Диагностика:
Ошибка в «Журналы приложений и служб -> CryptoPro-> DSS-> Frontend-> Admins».

Пример:
В процессе работы Веб-интерфейса произошла ошибка:
Произошла ошибка во время работы контроллера CryptoPro.DSS.Web.Frontend.Admins.Controllers.CertificatesController
Действие List
System.ServiceModel.Security.MessageSecurityException: Запрос HTTP запрещен для схемы аутентификации клиентов "Anonymous".

Возможные причины возникновения ошибки:
- Для пулов приложений DSS не был предоставлен доступ к закрытым ключам сервисных сертификатов DSS;
- В расширении EKU (Extended Key Usage) сервисных сертификатов DSS отсутствует назначение 1.3.6.1.5.5.7.3.2 - Проверка подлинности клиента;
- В хранилище «Доверенные корневые центры сертификации» локального компьютера сервера DSS присутствуют несамоподписанные сертификаты;
- В хранилище «Доверенные корневые центры сертификации» локального компьютера сервера DSS не установлены сертификаты издателей сервисных сертификатов DSS;
- Невозможно выполнить проверку сервисных сертификатов DSS на отзыв. 

Рекомендуемое решение:
- Убедиться, что пулам приложений DSS был предоставлен доступ к закрытым ключам сервисных сертификатов DSS.
- Убедиться, что в расширении EKU (Extended Key Usage) сервисных сертификатов DSS присутствует назначение 1.3.6.1.5.5.7.3.2 - Проверка подлинности клиента.
- Удалить/перенести в другие хранилища несамоподписанные сертификаты из хранилища «Доверенные корневые центры сертификации» локального компьютера сервера DSS, если таковые имеются. Найти такие сертификаты можно, выполнив командлет: Get-Childitem cert:\LocalMachine\root -Recurse | Where-Object {$_.Issuer -ne $_.Subject}
- Убедиться, что в хранилище «Доверенные корневые центры сертификации» локального компьютера сервера DSS установлены сертификаты издателей сервисных сертификатов DSS.
- Обеспечить проверку сервисных сертификатов DSS на отзыв (путем установки CRL в хранилище «Промежуточные центры сертификации» локального компьютера сервера DSS или обеспечив доступность CRL по ссылкам, указанным в расширении "Точки распространения списков отзыва" сервисных сертификатов DSS). 

5. Требуется делегирование

Диагностика:
Ошибка в «Журналы приложений и служб -> CryptoPro-> DSS-> Frontend-> Admins».

Пример:
Идентификатор экземпляра: 1/Frontend.
В процессе работы Веб-интерфейса произошла ошибка:
Произошла ошибка во время работы контроллера CryptoPro.DSS.Web.Frontend.Controllers.CertificatesController
Действие List
System.ServiceModel.FaultException`1[[CryptoPro.DSS.Common.Service.DssFault, CryptoPro.DSS.Common, Version=1.17.0.0, Culture=neutral, PublicKeyToken=cb703a801b9b4b55]]: Требуется делегирование.

Возможные причины возникновения ошибки:
В рамках одной сессии браузера была выполнена попытка сперва авторизоваться в личном кабинете оператора, а затем - в веб-интерфейсе сервиса подписи.

Рекомендуемое решение:
- Перезапустить браузер и попробовать еще раз авторизоваться в веб-интерфейсе сервиса подписи;
- Открыть новую вкладку браузера в режиме «Инкогнито», и авторизоваться через нее в веб-интерфейсе сервиса подписи.

6. Message: Authorization has been denied for this request

Диагностика:
Ошибка в «Журналы приложений и служб -> CryptoPro-> DSS-> SignServer-> Admins».

Пример:
Instance Unique Identifier: 1/signserver Source: Microsoft.Owin.Security.OAuth.OAuthBearerAuthenticationMiddleware Message: Authentication failed
System.IdentityModel.Tokens.SecurityTokenSignatureKeyNotFoundException: IDX10505: Unable to validate signature. The 'Delegate' specified on TokenValidationParameters, returned a null SecurityKey.

Возможные причины возникновения ошибки:
- На сервисе подписи не настроены отношения доверия с центром идентификации;
- Истек срок действия сервисного сертификата сервиса подписи. 

Рекомендуемое решение:
- Запросить отпечаток сервисного сертификата ЦИ: $idp_cert = (Get-DssStsProperties).ServiceCertificate
- Указать отпечаток сервисного сертификата ЦИ на сервисе подписи: Add-DssClaimsProviderTrust -IssuerName realsts -Thumbprint $idp_cert
Примечание: если при выполнении второго командлета в Powershell возникла ошибка "Доверенный издатель с именем realsts уже добавлен в коллекцию" - необходимо выполнить командлет: Set-DssClaimsProviderTrust -IssuerName realsts -NewThumbprint $idp_cert
- Проверить срок действия сервисного сертификата сервиса подписи. Если срок действия истек - необходимо перевыпустить его и скорректировать настройки в соответствие с руководством;
- Перезагрузить пулы приложений центра идентификации и сервиса подписи, выполнив командлеты: Restart-DssStsInstance и Restart-DssSignServerInstance

7. IDX10505: Unable to validate signature. The 'Delegate' specified on TokenValidationParameters, returned a null SecurityKey. 

Диагностика:
Ошибка в «Журналы приложений и служб -> CryptoPro-> DSS-> Frontend-> Admins».

Пример:
Instance Unique Identifier: 1/frontend Source: Microsoft.Owin.Security.OAuth.OAuthBearerAuthenticationMiddleware Message: Authentication failed
System.IdentityModel.Tokens.SecurityTokenSignatureKeyNotFoundException: IDX10505: Unable to validate signature. The 'Delegate' specified on TokenValidationParameters, returned a null SecurityKey.

Возможные причины возникновения ошибки:
- На веб-интерфейсе не настроены отношения доверия с центром идентификации;
- Истек срок действия сервисного сертификата веб-интерфейса.

Рекомендуемое решение:
- Запросить отпечаток сервисного сертификата ЦИ: $idp_cert = (Get-DssStsProperties).ServiceCertificate
- Указать отпечаток сервисного сертификата ЦИ на веб-интерфейсе: Add-DssFeClaimsProviderTrust -IssuerName realsts -Thumbprint $idp_cert
Примечание: если при выполнении второго командлета в Powershell возникла ошибка "Доверенный издатель с именем realsts уже добавлен в коллекцию" - необходимо выполнить командлет: Set-DssFeClaimsProviderTrust -IssuerName realsts -NewThumbprint $idp_cert
- Проверить срок действия сервисного сертификата веб-интерфейса. Если срок действия истек - необходимо перевыпустить его и скорректировать настройки в соответствие с руководством;
- Перезагрузить пулы приложений центра идентификации и веб-интерфейса, выполнив командлеты: Restart-DssStsInstance и Restart-DssFeInstance

(9 плюсик(ов))
Класс!
Не очень :(