没有OpenID的Yadis身份验证

时间:2010-01-17 10:24:42

标签: php authentication cookies openid

我需要一个与客户端服务器使用的当前身份验证系统协调一致的身份验证系统。

当前系统的工作原理如下:

  • 需要身份验证的页面会调用.htaccess文件中内部开发的mod_auth Apache模块。

  • 用户被重定向到通用登录页面。

  • 输入有效凭据后,会创建一个cookie,其中包含客户端的IP地址,公钥以及有关该用户的其他有用信息,所有base64都已加密。

  • 此后需要验证的任何页面都会检查公钥和请求的IP地址。如果用户的IP已更改,则会将其重定向到登录屏幕。如果cookie被篡改,它们将被重定向。

上述系统的好处是cookie不能在另一台机器上使用(除了在同一局域网上,但其他措施检查中间人攻击),因为IP地址不会匹配。

缺点是此方法会阻止用户的会话在服务器端扩展。换句话说,服务器端脚本无法代表用户获取信息,因为IP地址将不匹配。

这种限制在大多数情况下都有意义,因为它避免了允许服务器“窃取”用户的cookie。但是,这也意味着无法使用相同的身份验证系统保护Web服务,因为请求始终来自服务器的IP,绝不会来自客户端(除非使用AJAX,这是对Web服务的非常有限的使用)

我希望Web服务客户端(服务器端)将cookie传递给Web服务服务器,并让Web服务服务器直接与最终用户的客户端验证cookie的真实性。

我的基础是像Stackoveflow这样的网站如何使用Open ID在浏览器级别检查登录状态,除非检查失败,否则不会涉及最终用户。

快速维基百科搜索让我了解所涉及的基础系统是一个名为Yadis的协议。

所以我想知道我是否遗漏了这个难题的任何部分,如果我让自己对主要的安全漏洞开放:

  • 用户正常登录
  • 页面用户请求需要web-service
  • Page将用户的身份验证Cookie传递给Web服务
  • Web Service使用相同的cookie通过用户的浏览器请求通用的“确认身份验证”页面。 (没有用户看到这个)。
  • “确认身份验证”页面返回“用户登录”消息,或者浏览器打开一个带有登录页面的新窗口。
  • 收到上述“全部清除”消息后,Web服务将返回用户登录的原始页面请求的任何信息。

我错过了任何细节吗? Yadis只是一个名字给这个想法,还是我需要安装一些东西以确保它正常工作?

1 个答案:

答案 0 :(得分:0)

术语“Yadis”可能有点模糊,因为多年来它被称为不同的东西,但更多的是它指的是协议的发现阶段。也就是说,它回答了这个问题:给定一个标识符(如http://keturn.example.com/或xri:// = keturn *示例或其他),该用户使用的认证服务器是什么?它支持哪种版本的协议?

如果我正确地阅读了您的情况,那么您根本不会尝试解决这个问题。

您所描述的内容,授权一个Web服务代表服务器与另一个Web服务一起行动,更​​多地是OAuth要解决的问题的范畴。但是,如果你坚持使用客户端当前实现的auth协议,我不确定这对你有帮助。但它可能值得一看,它与您提出的解决方案没有什么不同。