单点登录网站

时间:2011-12-13 18:28:32

标签: php javascript jquery curl single-sign-on

我需要单点登录的帮助。我有siteA.com需要登录凭据,一旦你在SiteA.com,你可以做很多事情,其中​​一个是访问另一个应用程序siteB.com。如果您单击选项以转到此其他应用程序,则另一个应用程序还具有登录屏幕,其凭据与siteA.com的相同,因此siteA.com和siteB.com具有以下登录屏幕:他们拥有相同的凭据。

我试图让它成为一个单一的标志是否我可以远程登录或将siteA.com的凭据传递给siteB.com?

我感兴趣的是: 解决了完全相同的问题(实际上也适用于4个域)。我提出的唯一解决方案是,在“成功登录页面”中包含3个隐藏的iframe,这些iframe只需加载www.domain1.com/register_session.php,www.domain2.com/register_session.php等。 ...

作为register_session.php的参数,我使用'sid',其中包含会话ID:

session_id($_GET['sid']);
session_start();

这实际上是为了让所有这些域上的会话保持活跃,但对于你的cookie情况也一样。

我认为这可行,但问题是凭据,如何让脚本登录siteB.com?

我做了一些有用的东西...我复制了siteB.com的html,并将其添加到siteA.com中隐藏,在siteA.com上做了一个双POST,一个到siteA.com的登录和另一个到siteB.com的登录。这只适用于用户最近登录到siteB.com的情况,我认为登录到siteB.com会设置一个cookie来控制访问,这就是为什么进行双重POST会让你欺骗登录系统并且只要正确提供凭据,它成功获取登录cookie,允许您登录。<​​/ p>

3 个答案:

答案 0 :(得分:1)

将用户的信息存储在cookie中(例如数据库中的用户ID),然后在登录页面上查找该cookie。如果它存在并且是有效用户,请继续并将其登录。

创建cookie时,您应该能够将其域名设置为siteB.com的域,以便siteB.com可以看到它。只需为每个需要能够读取该cookie的域创建一个cookie,并在每个cookie上设置可接受的过期设置,以便它们在会话结束时或x天后过期。

根据您需要多少安全性,您可能需要提供某种保护以防止有人简单地创建自己的cookie以便自由进入(例如加密)

答案 1 :(得分:1)

您无法为两个特定域设置Cookie(除非它们都是同一域的子域)。您可能能够创建跨域cookie,但这是严重不安全的。

阅读here

答案 2 :(得分:0)

我曾经不得不解决类似的问题。我最终做的是将一个哈希附加到从SiteA到SiteB的任何链接[或表单]的URL查询字符串,反之亦然。我在数据库中使用了用户ID的MD5哈希值。在这两个站点上,如果$ _GET中存在该哈希,请使用搜索“MD5(user_id)=?”来记录用户而不是用用户名和密码搜索。

编辑:注意,这不是一个非常安全的解决方案 - 它恰好是我想要实现的目标。请记住安全。在上面的帖子中,攻击者可能会确定该令牌是整数的MD5哈希并开始修改它。