ADFS 2.0 - 在不同AD中请求服务令牌

时间:2012-04-18 12:13:00

标签: certificate wif adfs2.0

我有以下情况:

Active Directory 1:WCF客户端,ADFS 2.0(STS)

Active Directory 2:WCF服务(依赖方)

我已将RP添加到ADFS,但是当我从ADFS请求令牌时,我收到以下错误:System.ServiceModel.FaultException:ID3242:安全令牌无法通过身份验证或授权。

查看ADFS的事件日志,我发现匹配错误:

  

尝试构建证书链时发生错误   依赖方信任'http:// XXXXX / Service1 /'证书   由指纹'XXXXXXXXXXXX'识别。可能的原因是   证书已被撤销,证书链无法撤销   根据依赖方信任的加密方式进行验证   证书撤销设置或证书不在其中   有效期。

     

您可以使用Windows PowerShell命令对AD FS 2.0进行配置   依赖方加密证书的撤销设置。   依赖方信任的加密证书撤销设置:   CheckChainExcludeRoot构建时发生以下错误   证书链:未知错误。未知错误。

     

用户操作:确保信赖方信任加密   证书有效且尚未撤销。确保AD FS 2.0   如果撤消设置,则可以访问证书吊销列表   不指定“none”或“仅缓存”设置。验证您的代理   服务器设置。有关如何验证代理的详细信息   服务器设置,请参阅“AD FS 2.0故障排除指南”   (http://go.microsoft.com/fwlink/?LinkId=182180)。

看起来ADFS不信任来自RP的签名证书(可以理解,颁发签名证书的CA位于不同的AD中)。 可以从两个活动目录访问CertificateRevokationList。

我已将CA证书添加到“本地计算机”的受信任的根证书中,但我认为问题是验证机制。

我需要配置什么才能让ADFS发出使用正确证书签名的令牌,或者我如何说服ADFS证明该证书有效?

修改

我尝试使用powershell命令更改revokation检查:

 Set-ADFSRelyingPartyTrust  -SigningCertificateRevocationCheck CheckEndCert

但没有运气: Set-ADFSRelyingPartyTrust:无法使用指定的命名参数解析参数集。

At line:1 char:26
+ Set-ADFSRelyingPartyTrust <<<<   -SigningCertificateRevocationCheck CheckEndCert
    + CategoryInfo          : InvalidArgument: (:) [Set-ADFSRelyingPartyTrust], ParameterBindingException
    + FullyQualifiedErrorId : AmbiguousParameterSet,Microsoft.IdentityServer.PowerShell.Commands.SetRelyingPartyTrustC
   ommand

编辑2 : 这很有效:

(Get-ADFSRelyingPartyTrust) | Set-ADFSRelyingPartyTrust  -EncryptionCertificateRevocationCheck CheckEndCert

但现在我在Active Directory 1中的客户端抱怨证书......

  

System.ServiceModel.Security.SecurityNegotiationException:SOAP   安全谈判   'http:// XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX / Service1 /'用于目标   'http:// XXXXXXXXXXXXXXXXX / Service1 /'失败了。请参阅内部异常   更多细节。 ---&GT;   System.IdentityModel.Tokens.SecurityTokenValidationException:The   X.509证书CN = RP-服务链构建失败。证书   使用的是一个无法验证的信任链。更换   证书或更改certificateValidationMode。证书   无法将链构建到受信任的根权限。

3 个答案:

答案 0 :(得分:1)

也许你应该尝试将你的RP-Service证书添加到运行WCF客户端的机器上的Trusted People商店。这就是我在使用自签名证书在ADFS联合下测试WCF调用时所做的。

答案 1 :(得分:0)

我面临同样的错误。使用

有什么用处
Set-ADFSRelyingPartyTrust  -EncryptionCertificateRevocationCheck None

但这只会禁用RP部分的检查。由于我们谈论的是联合,因此联合服务器上也会发生同样的情况。所以你必须在那里做。无论如何,它只改变了我得到的错误 - 我仍然无法联合ATM。

答案 2 :(得分:0)

对我有用的命令是:

Set-ADFSRelyingPartyTrust  -TargetName <relyingpartytrustName> -EncryptionCertificateRevocationCheck None

我们已多次在各地(即托管WCF服务的服务器)安装签名和加密证书(由ADFS生成的自签名证书)。