我正在尝试设置声明感知网络应用程序开发环境。我是 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 的 adfs 联合,然后让来自 domain1 的 adfs 使用声明提供者信任接受来自 domain2 中的 adfs 的令牌。这样,如果声明规则配置正确,来自 domain1 和 domain2 的用户将能够登录和访问开发服务器的应用程序。
因此,您的第二个问题的答案是在 domain1 中的 adfs 上配置声明提供者信任以指向域 2 中的 adfs 和声明规则以转换/传递从 domain1 中的 adfs 收到的声明。然后,域 2 中的 adfs 还需要一个配置为指向 adfs 1 的依赖方信任,您可以在其中选择要收集和发送的声明。
至于问题1,看起来确实无法访问adfs 中服务通信证书的私钥。如果您将 adfs 安装为场,您将拥有一个基于域的服务帐户。如果您将其构建为独立的 adfs,它将使用内置网络服务帐户。此选择决定了您如何配置证书的权限。
你提到了 adfs 角色和 adfs 2.0,所以我不确定你是在两台服务器上使用 adfs 2 还是 Windows 2008/R2 附带的内置角色。请说清楚。
这些分步指南应该有所帮助。
http://technet.microsoft.com/en-us/library/adfs2-federation-wif-application-step-by-step-guide(v=ws.10).aspx
有关 adfs 的所有信息,请参阅
http://social.technet.microsoft.com/wiki/contents/articles/2735.ad-fs-2-0-content-map.aspx