У меня такой сценарий:
Active Directory 1: клиент WCF, ADFS 2.0 (STS)
Active Directory 2: служба WCF (проверяющая сторона)
Я добавил RP в ADFS, но когда я запрашиваю токен из ADFS, я получаю следующую ошибку: System.ServiceModel.FaultException: ID3242: токен безопасности не может быть аутентифицирован или авторизован.
Просматривая журнал событий ADFS, я обнаруживаю ошибку соответствия:
Произошла ошибка при попытке создать цепочку сертификатов для доверяющего сертификата http: // XXXXX / Service1 /, идентифицированного отпечатком «XXXXXXXXXXXX». Возможные причины: сертификат был отозван, цепочка сертификатов не может быть проверена, как указано в настройках отзыва сертификата доверия доверяющей стороны, или срок действия сертификата истек.
Вы можете использовать команды Windows PowerShell для AD FS 2.0, чтобы настроить параметры отзыва для сертификата шифрования проверяющей стороны. Параметры отзыва сертификата шифрования доверия проверяющей стороны: CheckChainExcludeRoot При построении цепочки сертификатов произошли следующие ошибки: Неизвестная ошибка. Неизвестная ошибка.
Действия пользователя: Убедитесь, что сертификат шифрования доверия проверяющей стороны действителен и не был отозван. Убедитесь, что AD FS 2.0 может получить доступ к списку отзыва сертификатов, если для параметра отзыва не указано значение «нет» или «только кэш». Проверьте настройки прокси-сервера. Дополнительные сведения о том, как проверить настройки прокси-сервера, см. В Руководстве по устранению неполадок AD FS 2.0 (http://go.microsoft.com/fwlink/?LinkId=182180).
Похоже, ADFS не доверяет сертификату подписи от RP (понятно, ЦС, выдавший сертификат подписи, находится в другом AD). CertificateRevokationList доступен из обоих активных каталогов.
Я добавил сертификат CA к надежным корневым сертификатам «локального компьютера», но я думаю, что проблема заключается в механизме проверки.
Что мне нужно настроить, чтобы ADFS выдавал токен, подписанный правильным сертификатом, или как я могу убедить ADFS в том, что сертификат действителен?
РЕДАКТИРОВАТЬ:
Я попытался изменить проверку отзыва с помощью команды powershell:
Set-ADFSRelyingPartyTrust -SigningCertificateRevocationCheck CheckEndCert
но безуспешно: Set-ADFSRelyingPartyTrust: набор параметров не может быть разрешен с использованием указанных именованных параметров.
At line:1 char:26
+ Set-ADFSRelyingPartyTrust <<<< -SigningCertificateRevocationCheck CheckEndCert
+ CategoryInfo : InvalidArgument: (:) [Set-ADFSRelyingPartyTrust], ParameterBindingException
+ FullyQualifiedErrorId : AmbiguousParameterSet,Microsoft.IdentityServer.PowerShell.Commands.SetRelyingPartyTrustC
ommand
РЕДАКТИРОВАТЬ 2: это сработало:
(Get-ADFSRelyingPartyTrust) | Set-ADFSRelyingPartyTrust -EncryptionCertificateRevocationCheck CheckEndCert
но теперь мой клиент в Active Directory 1 жалуется на сертификат ...
System.ServiceModel.Security.SecurityNegotiationException: не удалось согласовать безопасность SOAP с http: // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX / Service1 / для целевого http: // XXXXXXXXXXXXXXXXX / Service1 /. Подробнее см. Внутреннее исключение. ---> System.IdentityModel.Tokens.SecurityTokenValidationException: не удалось построить цепочку CN = RP-Service сертификата X.509. Используемый сертификат имеет цепочку доверия, которую невозможно проверить. Замените сертификат или измените certificateValidationMode. Не удалось построить цепочку сертификатов до доверенного корневого центра.