4

这篇文章让我想到了当您通过 FedUtil 将启用非声明的 ASP.NET 应用程序与 ADFS 联合时会发生什么。

这篇文章建议让这个工作的关键是打开对 Windows 令牌服务 (C2WTS) 的声明。此服务有效地将 ADFS 令牌转换为 Windows 令牌。

因此,我使用 Windows 身份验证构建了一个快速的 ASP.NET 应用程序,运行 FedUtil,我可以使用 ADFS Windows 身份验证或 StarterSTS 对 ADFS 进行身份验证。问题是 C2WTS 没有运行,所以它可以工作,尽管我预计它不会。

显然,您无法访问应用程序内的声明对象,但除此之外它可以正常工作。

然而,这确实引发了一个问题。由于您无权访问 FederatedPassiveSignOut 等,您如何从 ADFS 注销?

令牌是否被发送到应用程序?

它只是忽略它们而不抛出任何异常吗?

C2WTS 是否需要成为图片的一部分?

我错过了什么吗?

4

1 回答 1

2

在其他论坛上提问时,Steve Syfuhs 回答:

FedUtil 修改 web.config,因此身份验证方法为“无”,并在 Web 请求的早期插入一些处理程序以查看会话是否存在,如果不存在,则通过重定向到指定的 STS 创建会话, STS 做这件事,并将令牌传递回站点。另一个处理程序接收令牌并基于令牌构建 IClaimsPrincipal 对象。Thread.CurrentPrincipal 对象设置为 IClaimsPrincipal。因此,Windows 身份验证不会发生在 Web 应用程序中(但它在 ADFS 中)。

OWA(所有构建良好的 Web 应用程序都应该如此)查看 Thread.CurrentPrincipal 以了解用户的身份。只要 STS 提供的值与 OWA 所期望的匹配,OWA 就会很高兴。某些声明可通过 Thread.CurrentPrincipal 获得,例如 Name 声明,OWA 使用它来获取用户名。创建 C2WTS 是为了充当理解声明的应用程序和不理解声明的应用程序之间的垫片,方法是创建 Windows 令牌并将其附加到用户会话。OWA 需要调用 Active Directory 以获取某些信息,并且它通过 Windows 身份验证进行,因此需要 Windows 令牌。

在这种情况下,无法退出 ADFS,但您仍然可以通过删除 cookie 来终止 OWA 或自定义应用程序中的会话。在自定义 Web 应用程序中,您可以链接到 ADFS 注销页面,即https://adfsserver/adfs/ls/?wa=wsignout1.0,该页面将注销 ADFS。

更新:

只是为其他人记录:

这种方法在外包身份验证方面有效,但存在三个问题:

  • 无法访问声明对象。
  • 您必须推出自己的注销。
  • 联邦元数据有些“不同”。您不能通过 URL 将应用程序添加为 ADFS 中的 RP。您必须使用导入文件机制。这意味着无法更新元数据,因此如果 RP 有任何更改,您必须删除并重新配置。
于 2011-06-19T19:57:16.613 回答