我正在一个网站上工作,该网站是许多网站的核心/主人。我们还负责处理品牌旗下所有网站的身份验证。
客户希望包含单点登录操作,因此如果我要登录任何网站,我将登录所有网站。我们通过重定向到主站点(我们的)并执行登录来处理子站点登录。
决定通过将图像标签嵌入到页面中然后在每个子站点上调用页面来操作SSO。这将打开他们网站的客户端会话,以便他们可以设置cookie /做他们想要处理登录的内容。
这大部分都是 ,它已在IE7,FF 2& 3他们都工作。问题浏览器目前是Safari(和Chrome)。虽然在客户端会话中看似加载的图像似乎没有打开,但我们没有从子站点集中获取cookie。问题似乎是基于WebKit的浏览器,Safari和Chrome就是问题所在(我认为konqueror可能遭遇同样的命运,但目前我还没有Linux安装)。
有没有人知道如何让Safari识别嵌入式图像标记到外部主机作为打开客户端上下文?或者有人可以提供更好的方法从ASP.NET到非ASP.NET的站点进行SSO吗?
注意:是的我知道我们迄今为止在禁用图像方面所做的SSO概念存在问题。建议的解决方案不是我的,我只是坚持下去。
答案 0 :(得分:3)
我使用的大部分SSO内容都使用集中式身份验证服务器(CAS),并使用通过查询参数和cookie传递的票证进行操作。
基本思路是,如果您的网站未检测到故障单,则会重定向到您的CAS网站。该网站执行身份验证,设置身份验证cookie,并使用唯一的一次性故障单(作为查询参数)重定向回您的站点。重定向时,您的站点会检测到故障单并对CAS服务器进行回调,以使用带外Web请求来兑换故障单。此请求返回已登录用户的ID。您可以使用此命令在应用程序中设置经过身份验证的用户。
CAS服务器跟踪允许哪些应用程序彼此进行SSO。当身份验证请求来自SSO池中的站点并且身份验证票证对应于池中的另一个站点时,CAD服务器将使用票证进行响应,而不会强制重新进行身份验证。通过这种方式,您的网站可以在没有任何特殊“魔法”的情况下相互链接,这取决于CAS cookie将使用它的事实,以便用户可以绕过相关网站之间的重新认证。
答案 1 :(得分:1)
它看起来像Safari(在我的OS X上,至少应该是默认设置),而且我认为Chrome默认情况下不允许第三方Cookie 。
Safari->偏好设置 - >安全性 - >接受Cookie:
o总是
o从不
+仅限于您导航到的网站
有一些AJAX hackery来你的文档域来设置cookie,但我认为这不会真正解决你的问题。我认为Safari甚至禁止iframe设置第三方cookie,除非您设置了document.domain(但是,如果您共享一个公共域,您可能只需设置cookie域并完成所有操作)。
缺少window.open或一系列重定向,我无法想到你可以做些什么来解决第三方cookie问题 - 所以我可能会废弃嵌入式图像技巧并从头开始。