Vbulletin和Rails应用程序之间的单点登录

7
我们在VBulletin论坛上有很多用户。现在我想为同一用户库编写几个Rails应用程序。到目前为止,所有身份验证和会话管理都由VBulletin处理。提供SSO以便我的用户可以在VBulletin和我编写的Rails应用程序之间无缝切换的最佳方法是什么?
我正在处理与VBulletin和自定义应用程序的单点登录过程。我可以使用cookie登录VB,访问所有资源。但是当我发送“私信”时,它会显示以下信息:“您已关闭私信功能。您必须通过编辑您的选项将其打开后才能发送私信。”所有权限是否都在"datasource"表中设置?
谢谢 管理员
1个回答

7
理想情况下,您的两个网站应该是共同域名的子域名(例如forum.example.comrails.example.com),或者共享相同的域名(www.example.com)。其中一个站点将成为主要的认证器,并设置一个cookie(对于共同父域名的.example.com,请注意在example.com之前加上.,或在共享域名的情况下为www.example.com,以便两个应用程序都可以访问它),其中cookie包含:
  • 用户ID
  • 盐(登录时计算的随机值)
  • SHA-2签名,计算出三元组(用户ID + 盐 + 共享密钥),其中共享密钥是两个站点都知道的秘密字符串。
每个站点都可以从cookie中检索用户ID和盐,然后使用共享的秘密密钥(仅两个应用程序知道)来计算必须与cookie中存储的SHA-2签名匹配的SHA-2签名。
如果SHA-2签名匹配,则可以假定用户已通过身份验证,否则强制用户重新登录。
注销时必须销毁cookie。
小字说明
为了防止会话劫持,两个站点上的所有请求都应该使用SSL加密(使用https)。如果不可能,登录时应该基于客户端的IP地址以及浏览器类型和版本(User-agent)计算哈希值,并在cookie中存储。在提供每个请求之前,应重新检查客户端的IP地址和用户代理与哈希值是否匹配。基于哈希的方法是通过安全性来实现隐蔽性的,可以被欺骗;此外,从代理池或使用TOR的用户访问互联网时,每当一个不同的代理或出口节点(具有不同的IP地址)转发请求时,系统可能会将其踢出。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接