【问题标题】:ADFS 2.0 - request token for service in different ADADFS 2.0 - 为不同 AD 中的服务请求令牌
【发布时间】:2012-04-29 20:23:57
【问题描述】:

我有以下场景:

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

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

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

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

尝试构建证书链时出错 信赖方信任“http://XXXXX/Service1/”证书 由指纹“XXXXXXXXXXXX”识别。可能的原因是 证书已被吊销,证书链无法 按照依赖方信任的加密指定的方式进行验证 证书吊销设置或证书不在其范围内 有效期。

您可以使用 AD FS 2.0 的 Windows PowerShell 命令来配置 依赖方加密证书的吊销设置。 信赖方信任的加密证书吊销设置: CheckChainExcludeRoot 构建时出现以下错误 证书链:未知错误。未知错误。

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

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

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

我必须进行哪些配置才能让 ADFS 颁发使用正确证书签名的令牌,或者如何让 ADFS 相信证书有效?

编辑:

我已尝试使用 powershell 命令更改吊销检查:

 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://XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Service1/' 用于目标 “http://XXXXXXXXXXXXXXXXXX/Service1/”失败。请参阅内部异常 更多细节。 ---> System.IdentityModel.Tokens.SecurityTokenValidationException: X.509 证书 CN=RP-服务链构建失败。证书 使用的信任链无法验证。更换 证书或更改 certificateValidationMode。证书 无法将链构建到受信任的根权限。

【问题讨论】:

    标签: certificate wif adfs2.0


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      Set-ADFSRelyingPartyTrust  -EncryptionCertificateRevocationCheck None
      

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

      【讨论】:

      • 这是我在 EDIT 2 中写的。您也可以尝试将检查设置为 CheckEndCert。
      【解决方案3】:

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

      Set-ADFSRelyingPartyTrust  -TargetName <relyingpartytrustName> -EncryptionCertificateRevocationCheck None
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-03
        • 2020-07-05
        • 2012-04-17
        • 1970-01-01
        • 1970-01-01
        • 2018-04-26
        相关资源
        最近更新 更多