php与ruby共享session实现单点登录
背景
前一阵部门要做一个内部讨论区,希望能和原有的gitlab集成在一起。
discuz虽然成熟但是感觉不够高大上,找了几个ruby的论坛discourse,rabel虽然时髦值够了但是成熟度又缺了点,最后选了php的question2answer作为论坛程序,采用iframe的方式嵌入原来的gitlab程序。
单点登录方案
共享cookie
- 在cookie里保存user的信息,php读cookie并取得用户信息。
- ruby和php程序要在同一个域名下
- cookie在客户端是可见的,一般要对cookie进行加密。
- 数据不安全
共享session
- 在cookie里保存ruby session信息,php获得session信息后读session数据。
- ruby和php程序要在同一个域名下
- session内容客户端不可见。
cas
- 通过统一认证服务登录
- ruby和php登录时重定向至认证服务器,通过验证后回调相应服务保存token,之后只要具体服务向cas请求token是否过期就可以判断是否登录。
由于两个业务在同一个域名下,这里就放弃了复杂的cas方案;考虑源代码安全,没有用cookie存储用户信息,最后决定使用共享session的方式实现单点登录… Read the rest