![具有两个或更多域的 ADFS 2.0 + ASP.NET 开发环境中的证书错误](https://linux22.com/image/584761/%E5%85%B7%E6%9C%89%E4%B8%A4%E4%B8%AA%E6%88%96%E6%9B%B4%E5%A4%9A%E5%9F%9F%E7%9A%84%20ADFS%202.0%20%2B%20ASP.NET%20%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%E4%B8%AD%E7%9A%84%E8%AF%81%E4%B9%A6%E9%94%99%E8%AF%AF.png)
我正在尝试设置一个声明感知的 Web 应用开发环境。我是 ADFS 2.0 的新手,最终,我希望能够针对两个不同的域进行身份验证。我认为我已经非常接近了,但我从其中一个 ADFS 服务器收到证书错误。
在处理联合身份验证服务配置期间,发现元素“serviceIdentityToken”包含无效数据。无法访问已配置证书的私钥。
我在 Web 应用程序中输入凭据后,此错误记录在域 #1 上的 ADFS 服务器事件日志中。即使使用有效的凭据,我也会被转到 401 未经授权的访问页面。
运行 ADFS 服务的用户帐户具有证书私钥的权限,所以我不确定为什么会收到此错误。
我目前所做的:
- 在域#1上创建了一个服务器并安装了ADFS 2.0
- 在域#2上创建了一个服务器并安装了ADFS 2.0
- 在域 #1 上使用 VS 2010 创建了第三个开发服务器
- 在开发服务器上构建了一个简单的应用程序,并使其具有联邦意识(按照http://msdn.microsoft.com/en-us/library/bb897402.aspx);在 web.config 中,联合服务器设置为域 #1 上的服务器
我还没有在任何一个 ADFS 服务器上设置依赖方信任。这有必要吗?我似乎找不到任何好的文档来解释这应该如何工作。
我已经关注了这个(http://blogs.msdn.com/b/alextch/archive/2011/06/27/building-a-test-claims-aware-asp-net-application-and-integrating-it-with-adfs-2-0-security-token-service-sts.aspx) 指南进行设置,但我觉得可能存在某个我错过的简单步骤。
总结一下:
- 为什么我会收到上述证书错误?
- 我在设置 ADFS 时是否遗漏了任何步骤,以便能够针对两个域进行身份验证?(我可能遗漏了将两个 ADFS 服务器链接在一起的步骤)
在此先感谢大家的帮助。熟悉 ADFS 的人可能只需几分钟就能完成设置!
答案1
看起来您尝试做的是让开发服务器与域 1 中的 adfs 联合,然后让域 1 中的 adfs 使用声明提供方信任接受域 2 中的 adfs 的令牌。这样,只要声明规则配置正确,域 1 和域 2 中的用户就能够登录并访问开发服务器的应用。
因此,回答您的第二个问题,就是在域 1 中的 adfs 上配置声明提供者信任,以指向域 2 中的 adfs,并配置声明规则以转换/传递从域 1 中的 adfs 收到的声明。然后,域 2 中的 adfs 还需要配置依赖方信任,以指向 adfs 1,您可以在其中选择要收集和发送的声明。
至于问题 1,adfs 中的服务通信证书的私钥看起来确实无法访问。如果您将 adfs 安装为场,您将拥有一个基于域的服务帐户。如果您将其构建为独立 adfs,它将使用内置网络服务帐户。此选择决定了您如何配置证书上的权限。
您提到了 adfs 角色和 adfs 2.0,所以我不确定您是否在两台服务器上都使用 adfs 2 或使用 Windows 2008/R2 附带的内置角色。请澄清一下。
这些分步指南应该会有所帮助。
有关 adfs 的所有信息,请参阅
http://social.technet.microsoft.com/wiki/contents/articles/2735.ad-fs-2-0-content-map.aspx