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