场景:必须通过公司外联网上的iframe显示许多网站。 Extranet使用SSL和基于Active Directory的Windows身份验证。每个iframe的网站都需要经过身份验证的用户,但是要求不要求用户手动登录。每个网站的认证机制尚未确定。
问题:我需要了解如何在iframe中完成自动登录。我可以要求iframe网站使用适合我目的的特定身份验证机制,尽管我需要向他们提供来自AD的特定用户信息。
我被建议使用Windows Identity Foundation来解决身份验证挑战。我正在考虑两个解决方案,但作为一个WIF新手我不确定哪个更好,如果它们甚至可能。
解决方案1:我使用AD声明创建自定义安全令牌服务。当用户浏览我的一个iframe页面时,该页面以编程方式从STS获取一个令牌,并以某种方式将令牌添加到iframe。在网上看样本我相信我理解如何构建STS并以编程方式获取令牌。但是如何将它与iframe一起使用?将其插入iframe网址(http://website/default.aspx?token=xxx
)似乎不安全。
解决方案2:我创建了相同的STS。 iframe的网站配置为使用STS作为身份验证提供程序。当用户浏览我的一个iframe页面时,iframe的网站会自动向STS查询令牌,并将用户登录。但iframe的Web部件如何获取令牌 - 是原始用户可用的请求上下文,或者它是如何工作的?这可以在iframe中完成 - 我记得曾经读过一些关于不允许在iframe中使用cookie的内容吗?
回答上述问题 - 或许是一个不同的解决方案 - 是最受欢迎的。
答案 0 :(得分:2)
寻求解决方案#2。如果iframe中的页面(从现在依赖方 - RP)配置为使用STS作为身份验证提供程序,则首次加载时,它们会将浏览器(iframe)重定向到STS。 STS知道用户已经有一个单点登录会话(从最初登录到外部网),因此会发出一个会话令牌,它作为HTTP POST传递给依赖方,由WIF拦截并以表格形式传递给客户端一个cookie(默认情况下,但这可以使用自定义会话令牌处理程序覆盖)。有些浏览器最初不允许在iframe中使用cookie,而是通过在依赖方的响应中发送p3p标头,这是允许的。