无需登录即可识别网站用户?

时间:2010-02-04 23:46:47

标签: authentication web-applications openid identity

我想创建一段可嵌入许多不同网站(小部件)的代码。

我的代码有没有办法在没有用户登录的情况下识别用户?即,我是否可以使用浮动在Web上的任何已建立的身份机制来跨此小部件的实例可靠地识别它们?

我不需要(也不应该)利用有关此用户的任何信息,只需识别它们即可。

网站将是异构的;不能保证它们会有任何共同的方面,因此小部件代码需要完全自包含。

5 个答案:

答案 0 :(得分:6)

您想要做的是发明了什么cookie。但是浏览器在没有得到他们许可的情况下被人们跟踪是明智的,现在限制第三方cookie。

电子前沿基金会最近为uniquely identifying a visitor based on attributes of their browser提出了概念证明。它使用的东西如下:

  • User-Agent字符串
  • http-accept
  • 时区
  • 屏幕分辨率和颜色深度
  • 已安装的插件
  • 如果启用了Cookie

不能保证它是独一无二的,但我的浏览器肯定是,它会帮助你做出人们不喜欢的坏事。

答案 1 :(得分:3)

OpenID是整个互联网的SSO,但他们仍然需要登录OpenID。除此之外,我想不出解决方案。

答案 2 :(得分:0)

听起来您想要实现Single Sign On框架。基本上,当您第一次看到用户时,如果您不了解它们,则将它们重定向到服务器上的单一登录。 Wich对它们进行身份验证,并使用身份验证令牌将它们重定向回给您。您通过对SSO服务器的Web服务调用来验证身份验证令牌。如果它有效,那么您将该用户标记为已登录。

修改

考虑更多,并阅读tovare的答案和你的意见。为什么不创建一些像谷歌广告一样的JavaScript代码?您将javascript放在页面上,并使用动态iframe向您的中央跟踪服务器发出请求。

让您的跟踪服务器返回一个图像标记,其中嵌入了唯一ID(自己的会话ID)的src。 <img src=contentserver.com/track.php?id=12345668>

内容服务器具有服务器端脚本(上面的track.php),该脚本将其本地会话ID映射到从跟踪服务器接收的唯一ID。

所有网站的唯一ID保持不变。

EDIT2

使用javascript技巧,而不是使用图像。内容服务器只是从跟踪服务器请求javascript文件。但该文件是在服务器端生成的动态文件。它返回一个名为unique_id()的生成的javascript函数,它从跟踪服务器返回唯一的id。使用ajax调用track.php以确定这是否是唯一用户。

答案 3 :(得分:0)

我建议使用Open-ID而不是像这样的解决方法,但是如果你不喜欢这个解决方案,你可能会考虑这样的事情:

您可以使用来自单个域的Cookie,然后使用该域重定向到正确的网站,将user-id添加为参数或URL路径的一部分

例如,在foo.com -site上添加个人小部件的链接可能类似​​于:

http://bar.com/addwidget1?backtoo=http://foo.com/main/

bar.com将拥有cookie,更改用户首选项,然后在重定向之前将用户ID添加到反向链接:

foo.com/user-id/

此方法的问题包括

  • 您需要使用用户ID动态地重写每个页面。
  • 我认为这有点笨拙
  • 您无法充分利用网络上的网络缓存。
  • 用户可能会丢失他们的cookie。

好处

  • 无法登录
  • 由于您重定向很多,因此您可以获得有关您网站上用户移动的统计信息。

答案 4 :(得分:0)

将OpenID或简化版本与您自己的网站一起用作身份提供者。将用户重定向到设置或检查cookie的标识符站点,然后将用户的身份重定向回来,该身份由cookie指示,作为URL参数添加。

您的标识符站点可以是OpenID身份提供商,不需要任何用户交互即可进行身份验证。接收此身份的站点可能不是OpenID消费者,因为他们不向用户提供选择的提供者。如果您的cookie和标识符已签名,您可以取消OpenID所需的一些签名。

Facebook提供类似的东西;网站可以找到用户的Facebook身份(假设用户有一个),而不对用户进行任何操作。

相关问题