理想情况下,您的两个站点是公共域的子域(例如forum.example.com和rails.example.com),或者共享同一个域(www.example.com。)其中一个站点将是主要身份验证器,并设置一个 cookie(对于.example.com公共父域的情况[注意.before example.com] 或www.example.com在共享域的情况下,以便两个应用程序都可以访问它),其中 cookie 包含:
- 这
user ID
- a
salt(登录时计算的随机值),和
- a
SHA-2 signature在三元组 ( user ID+ salt+ a shared secret key) 上计算,其中共享密钥是两个站点都知道的秘密字符串。
每个站点都能够从 cookie 中检索user ID和salt,然后使用shared secret key(只有两个应用程序知道)来计算SHA-2 signature必须匹配SHA-2 signature存储在 cookie 中的 a。
如果SHA-2 signatures匹配,则可以假设用户已通过身份验证,否则强制用户再次登录。
注销时必须销毁 cookie。
小字
为防止会话劫持,通过两个站点发出的所有请求都应通过 SSL 加密(使用 https。)如果不可能,则应基于客户端的 IP 地址以及浏览器类型和版本(用户代理)的哈希值可能在登录时计算并存储在 cookie 中。在处理每个请求之前,应根据客户端的 IP 地址和用户代理重新检查它。基于散列的方法是通过默默无闻的安全性,并且可以被愚弄;此外,每次不同的代理或退出节点(具有不同的 IP 地址)转发请求时,从代理池后面访问 Internet 或使用TOR的用户可能会被您的系统踢出。