我们有一个 WCF 服务,它使用主动联合通过 AD FS 2.0 对调用者进行身份验证,并且它在内部运行良好。现在我们想将它暴露给外界,所以我们的服务器团队在 DMZ 中为该服务设置了一个服务器和一个 AD FS 代理服务器。
当调用WCF服务时,我们得到以下异常:
System.ServiceModel.Security.SecurityNegotiationException:SOAP 安全协商与'https://adfs-dev.example.com/adfs/services/trust/2005/kerberosmixed' 针对目标 'https://adfs-dev.example.com/adfs/services/trust/2005/kerberosmixed' 失败。请参阅内部异常以了解更多详细信息。'
---> System.IdentityModel.Tokens.SecurityTokenValidationException:提供的 NetworkCredentials 无法创建 Kerberos 凭据,请参阅内部异常了解详情。
---> System.IdentityModel.Tokens.SecurityTokenException: InitializeSecurityContent 失败。请确保服务主体名称正确。
--> System.ComponentModel.Win32Exception: 指定的目标未知或无法访问。
- 内部 AD FS 服务器是配置为场而非独立服务器的单个服务器,并且 AD FS 服务在服务帐户下运行。
- 代理 AD FS 服务器是配置为独立的单一服务器,AD FS 服务作为网络服务运行。
- DMZ 中应用服务器上的主机文件条目将 AD FS 服务名称指向代理服务器的 IP。
- 防火墙允许从代理到内部 AD FS 服务器的端口 443 上的 SSL 流量。
- 已为服务帐户注册 HOST/adfs-dev.example.com SPN。
我可能遗漏了什么?
答案1
‘https://adfs-dev.example.com/adfs/services/trust/2005/kerberosmixed' 不可用作代理上的端点。请选择可用的端点。