WCF服务如何知道用于解密传入安全令牌的证书?

时间:2013-03-14 22:05:00

标签: wcf security service token wif

我正在使用.NET 4.5和基于令牌的安全性实现WCF服务。在客户端,我使用先前从STS检索到的令牌调用myfact.CreateChannelWithIssuedToken(),当我使用此通道调用服务时,我收到以下错误(在WCF服务跟踪中) :

Cannot resolve KeyInfo for decryption: KeyInfo 'SecurityKeyIdentifier
    (
    IsReadOnly = False,
    Count = 1,
    Clause[0] = EncryptedKeyIdentifierClause(EncryptedKey = qDJDOHUxLxDP8/5baRbY6LrnIX2cYLGwC8b9xDQbEfLsYhcowtszecfWK93dFQHBNV+COHSZpKapJlzrbi12QlObuhfpB08vIxrgXCLg69w4PfAq/jzJcK3N16GHHADSE6XT0KVBXQbcwJqyrELLGAc9ve3cnn52EDg6rkVKBNg=, Method 'http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p')
    ) ', available tokens 'System.ServiceModel.Security.AggregateSecurityHeaderTokenResolver'.

我怀疑这是因为服务无法解密传入的安全令牌,但我不知道为什么会这样。证书位于LocalMachine \ My store中,并具有关联的私钥。

WCF如何找到必要的证书,以及为什么它无法在我的案例中找到它?

1 个答案:

答案 0 :(得分:4)

事实证明,服务证书是使用的证书。当我纠正此问题时(通过<serviceCertificate .../>旋钮:

<behavior name="my_service_behavior">
    <serviceCredentials useIdentityConfiguration="true" identityConfiguration="identity">
        <serviceCertificate 
            findValue="..." 
            x509FindType="FindByThumbprint" 
            storeName="My" 
            storeLocation="LocalMachine" />
    </serviceCredentials>
</behavior>

一切都开始了。