单点登录SSO
一.单点登录SSO(只提供思路,不提供实现)
什么是单点登录?单点登录全称Single Sign On(以下简称SSO),是指在多系统应用群中登录一个系统,便可在其他所有系统中得到授权而无需再次登录,包括单点登录与单点注销两部分(类似在新浪微博与新浪博客那样子)
二. 思路 (以java web来讲解)
1.相比于单系统登录,sso需要一个独立的认证中心,只有认证中心能接受用户的用户名密码等安全信息,其他系统不提供登录入口,只接受认证中心的间接授权。间接授权通过令牌实现,sso认证中心验证用户的用户名密码没问题,创建授权令牌,在接下来的跳转过程中,授权令牌作为参数发送给各个子系统,子系统拿到令牌,即得到了授权,可以借此创建局部会话,局部会话登录方式与单系统的登录方式相同。
2.在web中怎么实现,也就是说在浏览器中怎么知道用户使用的多个系统是否是你的多个系统且是否登录了呢
———————————————-cookie
3.使用cookie 来验证用户是否登录有3种情况,
(1.)所有子系统与认证中心系统同域 (类似 www.a.com/sso1 www.a.com/case1 www.a.com/case2 )
(2.)所有子系统与认证中心系统同父域 (类似 case.a.com/sso1 case1.a.com/case1 case2.a.com/case2 )
(3.)所有子系统与认证中心系统都不同域 (类似 www.a.com/sso1 case.a.com/case1 csdn.a.com/case 2)
4.看到这里大概有点思路了吧
1. 同域中,在浏览器中可以获取cookie吧,也就是在登录某一系统时(系统1),在此系统1把用户名和密码在后台通过一定的加密后发给认证中心去认证,认证成功与否,返回标识,在此系统1进行判断标识如果登录成功,开始向浏览器写入用户登录成功的cookie,———–此时浏览器中有cookie了吧, 再进行登录另一系统时(这里叫系统2),系统2读到有cookie,把cookie进行初步检验,与解析,再进行一定的加密后发给认证中心去认证,认证成功与否,返回标识,系统2判断标识登录成功就直接进行了页面的跳转了,也就是不用再次进行用户输入账号等的 ——– 单点登录SSO1.
2.同父域,其实和同域是差不多的,只要把cookie写到父域中去就行了
例如:
Cookie ck = new Cookie("cookie名", "cookie值");
//case.a.com/sso1 case1.a.com/case1 case2.a.com/case2 为同父域
ck.setDomain(".a.com"); //把cookie设置到父域的下面
ck.setPath("/");
ck.setMaxAge(60 * 60 * 3);//过期时间 单位秒
response.addCookie(ck);
3.最麻烦的不过是 完全不同域了
- 分析,不同域读不了cookie 哪该用什么来 ———还是cookie
- 不过cookie不该由某一系统写了,而是每个系统自己写自己的, 思路和上边的还是差不多,只不过要另外有一个接口进行cookie的写入
- 也就是在登录某一系统成功时,进入成功的页面,你可以通过 “iframe”标签隐藏的请求让常用系统进行cookie的写入
最后,方法不唯一,只是提供思路—–
——没了,记住sso单点登录安全很重要