0

我正在一个站点上工作,该站点是许多站点的核心/主站点。我们还负责处理品牌旗下所有网站的身份验证。

客户希望包含单点登录操作,因此如果我要登录任何站点,我将登录到所有站点。我们通过重定向到主站点(我们的)并执行登录来处理站点登录。

决定 SSO 将通过将图像标签嵌入页面然后调用每个子站点上的页面来运行。这将打开到他们网站的客户端会话,以便他们可以设置 cookie/做他们想要处理登录的事情。

在大多数情况下都有效,它已经在 IE7、FF 2 和 3 上进行了测试,它们都可以工作。目前有问题的浏览器是 Safari(和 Chrome)。尽管图像确实似乎在客户端会话中加载,但似乎没有打开,但我们没有从子站点集中获得任何 cookie。问题似乎是基于 WebKit 的浏览器,其中 Safari 和 Chrome 是问题(我认为 konqueror 可能会遭受同样的命运,但目前我没有安装 Linux)。

有谁知道让 Safari 将嵌入的图像标签识别到外部主机作为打开客户端上下文的方法?或者有人可以提供一种更好的方法来从 ASP.NET 到不是 ASP.NET 的站点进行 SSO?

注意:是的,我知道到目前为止我们所做的 SSO 概念在禁用图像方面存在问题。提出的解决方案不是我的,我只是坚持下去。

4

2 回答 2

3

我使用过的大多数 SSO 东西都使用集中式身份验证服务器 ( CAS ),并使用通过查询参数和 cookie 传递的票证进行操作。

基本思想是,如果您的网站没有检测到票证,它会重定向到您的 CAS 网站。网站执行身份验证,设置身份验证 cookie,并使用唯一的一次性票证(作为查询参数)重定向回您的站点。重定向后,您的站点会检测到票证并回调到 CAS 服务器以使用带外 Web 请求兑换票证。此请求返回已登录用户的 id。您可以使用它在应用程序中设置经过身份验证的用户。

CAS 服务器跟踪哪些应用程序允许彼此进行 SSO。当身份验证请求来自 SSO 池中的站点并且身份验证票证对应于池中的另一个站点时,CAD 服务器会使用票证进行响应,而不会强制重新进行身份验证。这样一来,您的站点就可以相互链接,而无需任何特殊的“魔法”,这取决于 CAS cookie 是否会实现这一事实,因此用户可以绕过相关站点之间的重新身份验证。

于 2008-10-27T23:40:23.360 回答
1

它看起来像 Safari(至少在我的 OS X 上 - 这应该是默认设置),而且我假设 Chrome,默认情况下不允许 3rd 方 cookie 。

Safari->首选项->安全->接受 Cookie:

o 总是
o 从不
+ 仅来自您导航到的站点

有一些AJAX 黑客可以让您的文档域设置 cookie,但我认为这并不能真正解决您的问题。我认为 Safari 甚至禁止 iframe 设置 3rd 方 cookie,除非您设置了 document.domain(不过,如果您共享一个公共域,您可能只需设置 cookie 域并完成所有操作)。

缺少 window.open 或一系列重定向,我真的想不出你可以做些什么来解决 3rd 方 cookie 问题 - 所以我可能会放弃嵌入图像的技巧并从头开始。

于 2008-10-27T23:31:53.267 回答