这个article让我想到当你通过FedUtil与ADFS联合使用非声明的ASP.NET应用程序时会发生什么。
文章建议,使这项工作的关键是打开声明到Windows令牌服务(C2WTS)。此服务有效地将ADFS令牌转换为Windows令牌。
所以我使用Windows身份验证构建了一个快速的ASP.NET应用程序,运行了FedUtil,我可以使用ADFS Windows身份验证或StarterSTS对ADFS进行身份验证。问题是C2WTS没有运行所以它可以工作,虽然我预计它不会。
显然,您无法访问应用程序中的声明对象,但是它可以正常工作。
然而,这确实引起了一个问题。由于您无法访问FederatedPassiveSignOut等,您如何从ADFS注销?令牌是否被发送到应用程序?
是否只是忽略它们而不抛出任何例外?
C2WTS是否需要成为图片的一部分?
我错过了什么吗?
答案 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。
更新
仅为其他人记录:
这种方法在外包认证方面有效,但存在三个问题: