調査中の WIF シナリオにカスタム STS を実装しようとしていますが、失敗しています。トークンの署名に使用された証明書から秘密鍵を取得しようとすると失敗します。次の構成で 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);
しかし、後で失敗します。私はこれを解決する運がありません, 助けてください!