|
我们都知道网易、搜狐等大型门户都有“通行证”的概念,这个通行证系统就是今天讨论的“单点登录系统”。其主要特征是多个站点一个用户中心,一点登陆后其他也自动登录,注销也是。比如我们在126登录了邮箱,再去163.com就是登陆状态。我这里的实现方案是传统的cookie方案。希望此文对需要的朋友有用,也希望不足之处大家能够提出。
SSO的基本功能:
统一登录
所有站点的登录都要跳转至SSO来登录,同时附带刚刚请求的url参数,以便登陆后返回。
例如 http://sso.a.com/login?url=http://www.b.com ,登录之后,我们Response一个cookie,并且将其domain设为 a.com顶级域,这样只要是同域的站点都可以直接访问到这个cookie。
由于cookie不能跨域,所以这里要解决不同域下的cookie问题。解决办法就是通过JS API来获取a.com的cookie信息,并通过url传递个b.com。
我们知道ajax是不能跨域访问的,但是我们可以<script>一个跨域的JS(这就是JSAPI),所以SSO系统需要提供一个callback参数,输出为一段js代码。
SSO输出cookie给调用者,接受callback参数
var user = Request.Cookies["Username"]; var callback = Request.QueryString["callback"]; if(user!=null) Response.Write(callback+"("+user.ToJson()+")");//ToJson是一个扩展方法,将对象序列化为Json格式
it知识库:Single Sign-On(SSO)单点登陆的具体实现方案,转载需保留来源!
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。