非声明启用的ASP.NET应用程序和ADFS v2.0

时间:2011-06-16 03:06:16

标签: adfs2.0 wif

这个article让我想到当你通过FedUtil与ADFS联合使用非声明的ASP.NET应用程序时会发生什么。

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

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

显然,您无法访问应用程序中的声明对象,但是它可以正常工作。

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

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

是否只是忽略它们而不抛出任何例外?

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

我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

在其他论坛上询问,Steve Syfuhs回答说:

FedUtil修改web.config,因此身份验证方法为“None”,并在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进行任何更改,则必须删除并重新配置。