背景

前一阵部门要做一个内部讨论区,希望能和原有的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