Я пытаюсь реализовать пользовательский STS для сценария WIF, который я изучаю, но он терпит неудачу.При попытке получить закрытый ключ из сертификата, используемого для подписи токенов, происходит сбой.Я создаю STS со следующей конфигурацией:
var signingCert = new X509Certificate2(@"C:\<path>\MySigningCertificate.pfx");
var config
= new SecurityTokenServiceConfiguration()
{
DisableWsdl = true,
TokenIssuerName = "Tribold",
SecurityTokenService = typeof(TriboldSecurityTokenService),
SigningCredentials = new X509SigningCredentials(signingCert),
CertificateValidationMode = X509CertificateValidationMode.Custom,
CertificateValidator = new CertificateValidator()
};
Однако, когда настроено ведение журнала диагностики WCF, в средстве просмотра трассировки служб появляется следующее сообщение:
The private key is not present in the X.509 certificate.
Похоже, что это регистрируется, когда код выходит из моего пользовательского STS (то есть после вызова GetOutputClaimsIdentity(...)
в моем пользовательском классе STS, и, следовательно, я могу только предполагать, что теперь он пытается подписать выданный маркер безопасности и не работает, потому чтоне удается получить закрытый ключ для этого.
Похоже, что закрытый ключ присутствует в загруженном сертификате:
Debug.Assert(signingCert.HasPrivateKey == true);
, но позже это не удается. Мне не повезлопомогите, пожалуйста!