WIF3.5とws2007FederationHttpBindingバインディングを使用する.NET4.0でのWCFサービスがあります。現在、セルフホストサービスとして(正常に)実行されていますが、IIS7.5で実行することをお勧めします。しかし、私はそれを動作させることができません。
私はこれについて深い知識や経験を持っていないので、セルフホスティングで機能する構成をweb.configにコピーするだけでこれに着手しました。IISホスティングの場合は追加が必要と思われるが、セルフホスティングの場合は追加が必要と思われることを除いて、これらはほぼ同じですbehaviors\servicebehaviors\behavior\serviceCredentials\serviceCertificate
(理由はわかりません)。クライアント構成は、両方のサービス設定で同じです(エンドポイントアドレスを除く)。セルフホストサービスとIISホストサービスのテストは同じマシンで行われ、VS開発サーバー、IIS Express、および通常のIISでIISホストサービスを試しました。クライアントはこの同じマシン上にあります。STSは別のマシン上にあります。
関係する3つの(x509)証明書があります。サービスの証明書とSTSが使用する署名証明書。どちらも自己署名ルート証明書の下にあります。DefaultAppPool(Webサービスがホストされている場所)は、両方の証明書にアクセスできます。私の知る限り、SSLは関係していません。
IISでホストされているサービスを実行し、メタデータを要求できます。実際にリクエストするとエラーが発生します。クライアント側のエラーはかなり一般的なようです。
An unsecured or incorrectly secured fault was received from the other party. See the inner FaultException for the fault code and detail.
An error occurred when verifying security for the message.
クライアントのsvcトレースログはほとんど同じことを示しています。
サーバーエラーはエラーをスローしませんが、svcログはこれを明らかにします:
The X.509 certificate CN=sts.public.example.com chain building failed. The certificate that was used has a trust chain that cannot be verified. Replace the certificate or change the certificateValidationMode. The revocation function was unable to check revocation for the certificate.
System.IdentityModel.Selectors.X509CertificateChain.Build(X509Certificate2 certificate)
System.IdentityModel.Selectors.X509CertificateValidator.ChainTrustValidator.Validate(X509Certificate2 certificate)
System.IdentityModel.Selectors.X509SecurityTokenAuthenticator.ValidateTokenCore(SecurityToken token)
System.IdentityModel.Selectors.SecurityTokenAuthenticator.ValidateToken(SecurityToken token)
System.IdentityModel.Selectors.SamlSecurityTokenAuthenticator.ResolveClaimSet(SecurityToken token)
System.IdentityModel.Selectors.SamlSecurityTokenAuthenticator.ValidateTokenCore(SecurityToken token)
System.IdentityModel.Selectors.SecurityTokenAuthenticator.ValidateToken(SecurityToken token)
System.ServiceModel.Security.ReceiveSecurityHeader.ReadToken(XmlReader reader, SecurityTokenResolver tokenResolver, IList`1 allowedTokenAuthenticators, SecurityTokenAuthenticator& usedTokenAuthenticator)
System.ServiceModel.Security.ReceiveSecurityHeader.ReadToken(XmlDictionaryReader reader, Int32 position, Byte[] decryptedBuffer, SecurityToken encryptionToken, String idInEncryptedForm, TimeSpan timeout)
System.ServiceModel.Security.ReceiveSecurityHeader.ProcessEncryptedData(EncryptedData encryptedData, TimeSpan timeout, Int32 position, Boolean eagerMode, Boolean& primarySignatureFound)
System.ServiceModel.Security.ReceiveSecurityHeader.ExecuteFullPass(XmlDictionaryReader reader)
System.ServiceModel.Security.ReceiveSecurityHeader.Process(TimeSpan timeout, ChannelBinding channelBinding, ExtendedProtectionPolicy extendedProtectionPolicy)
System.ServiceModel.Security.MessageSecurityProtocol.ProcessSecurityHeader(ReceiveSecurityHeader securityHeader, Message& message, SecurityToken requiredSigningToken, TimeSpan timeout, SecurityProtocolCorrelationState[] correlationStates)
System.ServiceModel.Security.SymmetricSecurityProtocol.VerifyIncomingMessageCore(Message& message, String actor, TimeSpan timeout, SecurityProtocolCorrelationState[] correlationStates)
System.ServiceModel.Security.MessageSecurityProtocol.VerifyIncomingMessage(Message& message, TimeSpan timeout, SecurityProtocolCorrelationState[] correlationStates)
sts.public.example.comは、STSの署名証明書です。このcertificateValidationModeをどこに配置するのか、IISでなぜ異なるのかわかりません。
IDモデルにはカスタムissuerNameRegistryとclaimsAuthorizationManagerがあり、サービス動作にはserviceAuthorizationManagerがありますが、エラーが発生する前にヒットすることはありません。したがって、サーバーがクライアントから署名付きトークンを受信し、IIS自体が何らかの理由で証明書の検証に失敗した場合にエラーが発生する可能性があります(ランダムな推測)。
設定ファイルとコードサンプルを提供しますが、正確に何が関連しているか、何が関連していないかわからないため、すべてかなり多くなりますが、説明が必要な場合は、できるだけ早く追加します。
私は可能な限りcertificateValidationと失効チェックをオフにしてみましたが、ほとんど理解できない多くの設定を無益にいじりました。この投稿はしばらくは希望に満ちているように見えましたが、提案された解決策がどこに当てはまるかはわかりません。日付を考えると、もはや関連性がない可能性があります。
誰かが私にソリューションの方向性を示したり、セルフホストサービスとIISホストサービスのセットアップ/構成要件の違いを説明したりできれば、非常に役立ちます。