首页 文章

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

提问于
浏览
1

我有以下场景:

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

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

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

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

尝试构建由指纹'XXXXXXXXXXXX'标识的信赖方信任'http:// XXXXX / Service1 /'证书的证书链时发生错误 . 可能的原因是证书已被撤销,证书链无法按照信赖方信任的加密证书撤销设置或证书不在其有效期内的规定进行验证 . 您可以使用Windows PowerShell命令为AD FS 2.0配置信赖方加密证书的吊销设置 . 依赖方信任的加密证书吊销设置:CheckChainExcludeRoot构建证书链时发生以下错误:未知错误 . 未知错误 . User Action:请确保依赖方信任的加密证书有效且尚未撤销 . 如果吊销设置未指定“none”或“仅缓存”设置,请确保AD FS 2.0可以访问证书吊销列表 . 验证您的代理服务器设置 . 有关如何验证代理服务器设置的详细信息,请参阅“AD FS 2.0故障排除指南”(http://go.microsoft.com/fwlink/?LinkId=182180) .

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

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

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

EDIT:

我尝试使用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

EDIT 2 :这有效:

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

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

System.ServiceModel.Security.SecurityNegotiationException:目标'http:// XXXXXXXXXXXXXXXXX / Service1 /'的'http:// XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX / Service1 /'的SOAP安全协商失败 . 有关详细信息,请参阅内部异常---> System.IdentityModel.Tokens.SecurityTokenValidationException:X.509证书CN = RP-服务链构建失败 . 使用的证书具有无法验证的信任链 . 替换证书或更改certificateValidationMode . 无法将证书链构建到受信任的根颁发机构 .

3 回答

  • 0

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

  • 1

    我面临同样的错误 . 使用有什么帮助

    Set-ADFSRelyingPartyTrust  -EncryptionCertificateRevocationCheck None
    

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

  • 0

    对我有用的命令是这样的:

    Set-ADFSRelyingPartyTrust  -TargetName <relyingpartytrustName> -EncryptionCertificateRevocationCheck None
    

    我们有几次,导致在任何地方(即托管WCF服务的服务器)安装签名和加密证书(由ADFS生成的自签名证书) .

相关问题