新浪面试题: 讲述单点登录认证流程

一、什么是sso

单点登录(sso),简称sso,是目前比较流行的企业业务整合的解决方案之一。sso是指在多个应用系统中,用户只需登录一次就可以访问所有相互信任的应用系统。

比如有多个子系统, a.com,b.com,c.com ...

要求:用户在任意一个子系统登录成功后,都可以访问其它子系统中受保护的资源。

二、认证流程

1)用户通过浏览器访问子系统A受保护的资源,既a.com/pageA。

2)在子系统A中没有用户session数据,子系统A认为用为未登录,于是子系统A将请求重定向到认证中心sso.com,重定向地址为: sso.com?param=a.com/pageA。

3)请求到达认证中心后,发现在认证中心没有该用户的session,于是将登录页面响应给浏览器,地址为: login.html?param=a.com/pageA

4) 用户输入用户名和密码,提交表单到认证中心;同时携带a.com/pageA

5) 认证中心收到用户名和密码后,校验成功,此时认证中心创建全局session,同时生成令牌ticket。
并重定向到a.com/pageA?ticket=xxx

6) 响应到达浏览器端,会收到cookie: domain= sso.com set cookie: jsessionid=xxxx;并保存。

7)从浏览器再次发送a.com/pageA?ticket=xx请求,请求到达子系统A后,取出ticket并向认证中心校验ticke是否有效,如果有效,则说明该用户已经在认证中心登陆过。 子系统就会与用户建立局部session,将用户信息保存到该局部session中。请求响应到浏览器后,浏览器收到cookie,domain=a.com;set cooki: jsessionid=xxx;

8) 当用户再次访问系统A的其它受保护页面时,就会带上domain=a.com的cookie,也就是jsessionid,子系统认为该用户已经登录过了,有权利访问相应受保护资源。

9)当用户访问系统B,既b.com/pageA时,由于在系统B中并没有建立局部session,于是系统B会将请求重定向到认证中心。但是浏览器本地已经保有了认证中心的cookie,也就是domain=sso.com的jsessionid,会携带该jsessionid访问认证中心。

10)到达认证中心后,因为有Jseesionid,认证中心认为该用户已经登录过,重新签发ticket,并重定向到b.com/pageA?ticket=xxx

11) 响应倒到浏览器后,向b.com/pageA?ticke=xxx的系统B发送请求,系统B取出ticket并向认证中心认证,认证有效,则子系统B与用户建立局部session.将用户信息保存到该局部session中。请求响应到浏览器后,浏览器收到cookie,domain=b.com;set cooki: jsessionid=xxx;


12)至此,用户登录一次,就可以访问系统A、系统B、系统X

 

猜你喜欢

转载自blog.csdn.net/xiaokanfuchen86/article/details/115288578