12-31
单点登录,英语为 Single Sign-On,粗俗点讲,就是登录一次,全站适用。
单点登录在应用中的实际意义,就是减少开发量,增强用户体验。
减少开发量,指的是:只要开发一套用户系统, 各个系统统一调用。用户系统尽量优化接口,通用性,安全性,达到一次开发, 全站适用。
增强用户体验,指的是:用户一次登录,全站登录。而不是切换一个模块,就登录一次。
web方面单点登录主要是用cookie传递令牌进行身份认证。简单说下令牌。
我这里用散列值来作为令牌,当然散列值之中有我的的密钥,防止别人伪造我的令牌。
环境:sso.sunboyu.cn 用户中心 vps.sunboyu.cn/cookie.php 跨子域不同脚本访问测试。 令牌密钥: $key
具体规则: sso.sunboyu.cn 用户登录,登录信息写到cookie,cookie做用域为 sunboyu.cn。并且生成令牌sso_key=md5(uid+username+key)。
登陆后,其他子域站点调用此cookie信息,并且验证此令牌是否是合法的令牌,if( md5( cookie[uid]+cookie[username] )==cookie[key] )
这样既可判断,此令牌合法性而确认此用户为登录。
具体demo:http://sso.sunboyu.cn
延伸:一个简单的md5似乎很容易让别人猜解加密的算法,来暴力一翻也不是没有可能,因此,除了加密外,算法的安全性和密钥的安全性也是需要考虑的。
如果安全级别要求高之又高,可以考虑rsa算法,不过速度就是问题了。其中又参考了一些朋友的意见,用对称加密,比如php中的Mcrypt 函数。
扩展开发:对于大多数网站,跨子域的单点登录就能满足应用。但对于一些域名复杂的网站,比如sohu,显然多个域名不能用此方法实现。这时就得搞出跨跨的单点登录系统。等年后继续得瑟。