为什么我会收到此错误,这究竟是什么意思?除了不匹配的证书设置之外,还有其他什么吗?
我有一个本地运行的单元测试,它在我们的Active Federation数据中心点击ADFS代理,然后命中我们在Azure中运行的WCF Web服务(Web角色)。客户端错误输出MessageSecurityException。因此,查看服务器的服务日志,它会记录异常:
Cannot resolve KeyInfo for decryption: KeyInfo 'SecurityKeyIdentifier
(
IsReadOnly = False,
Count = 1,
Clause[0] = EncryptedKeyIdentifierClause(EncryptedKey = abcdefg123456==, Method 'http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p')
)
', available tokens 'System.ServiceModel.Security.AggregateTokenResolver'.
我在网上找到的一切都说明我的客户端和服务器之间的证书不匹配。但我对这些证书引用进行了双重,三重和四重检查,它们是相同的。客户端(本地单元测试)端点:
<endpoint address="https://mydomain.com/TestService.svc"
binding="customBinding"
bindingConfiguration="WS2007FederationHttpBinding_ISayHelloService"
contract="ActiveFederationHelpers.Tests.ISayHelloService"
name="WS2007FederationHttpBinding_ISayHelloService">
<identity>
<certificateReference findValue="D4ECD7FF6A551FAA040BA0B62B77B8EA0F11CD16"
storeLocation="LocalMachine"
storeName="My"
x509FindType="FindByThumbprint" />
</identity>
</endpoint>
我的服务器的服务配置(我RDP进入一个Azure实例,从那里拉出来确认它真的是我认为的):
<serviceCertificate>
<certificateReference findValue="D4ECD7FF6A551FAA040BA0B62B77B8EA0F11CD16" storeLocation="LocalMachine" storeName="My" x509FindType="FindByThumbprint" />
</serviceCertificate>
我已确认这些证书都安装在我的本地计算机(单元测试)和Azure服务器(Web服务服务器)上。我甚至已经确认指纹是我配置中的内容。我已经在本地环境中成功运行了。唯一的区别是证书,URI和Azure的引入。
我已经仔细检查过的其他一些事情:
答案 0 :(得分:0)
最终,ADFS配置错误,不知怎的,这就是导致的错误。错误配置是由于我的联合身份验证服务名称不是解析为ADFS代理的主机名(只是ADFS服务器本身)。围绕我们的公共代理主机名重新架构我们的ADFS设置为我们解决了这些问题。
我怀疑这不是Azure之外的问题,原因是联盟服务名称解析为内部服务器而不是外部代理,Azure只能访问外部代理。
无论哪种方式,故事的道德(几乎没有人似乎谈论)是你的联邦服务名称必须是公共URI ,如果你希望使用它的代理,那代理必须解析为该公共URI!