本文简单介绍单点登录的实现原理,并以项目组件为例,说明单点登录的跳转流程。
单点登录原理
下面举例说明单点登录跳转流程,涉及子系统A(www.a.com),子系统B(www.b.com),浏览器,cas服务(www.sso.com)
访问子系统A,用户未登录
- 输入https://www.a.com
- 重定向到cas服务https://www.sso.com?service=https://www.a.com,service参数用于登录成功后重定向
- 跳转到登录页,用户输入用户名密码,登录成功
- 重定向到https://www.a.com?ticket=ST-16666-EA5WKa96r72ROB0f3UiB-cas,cas服务器给用户分发一个服务票据ST,同时cas向浏览器发送一个票据授权cookie(TGC)
- 子系统A拿到ticket,去cas验证ticket是否有效,cas确认后返回用户的身份信息,子系统A将用户信息写到session
访问子系统A,用户已登录
- 用户已登录,再次访问子系统A,子系统A在session中读到用户信息,不会再去cas认证
访问子系统B
- 此时浏览器已经存在一个票据授权cookie(TGC),子系统B的session中没有用户信息,需要去cas服务器认证
- cas根据TGC从TGT获取用户信息,根据service参数生成一个ST,返回ST给浏览器并重定向,达到了sso的效果
- 子系统B拿到ticket,去cas验证ticket是否有效,cas确认后返回用户的身份信息,子系统B将用户信息写到session
ST(Service Ticket,服务票据):ST是用户访问某一个系统的凭证,由cas服务在用户通过认证后生成,为了保证安全性,ST具有使用一次即自动销毁的特点
TGT(Ticket Granting Ticket,票据授权票据):用户通过cas的身份认证,cas给用户颁发一个TGT,代表用户具有门户的通行证
TGC(Ticket Granting Cookie,票据授权cookie):是TGT的容器,存放于在用户浏览器;TGC是实现单点登录的关键所在,通过传递TGC,cas服务能够直接判断用户身份的合法性,避免用户重复登录,用户浏览器关闭,TGC即失效。
通过访问项目isupm组件,说明单点登录的跳转流程
访问isupm,用户未登录
- 访问 https://192.168.0.100/isupm/user
- 重定向 https://192.168.0.100/portal/cas/login?service=https://192.168.0.100/isupm/user
- 重定向 https://192.168.0.100/bic/ssoService/v1/casLogin?service=https://192.168.0.100/isupm/user
&login=https://192.168.0.100:443/portal/cas/loginPage
&home=https://192.168.0.100:443/portal - 跳转到登录页 https://192.168.0.100:443/portal/cas/loginPage&home=https://192.168.0.100:443/portal
输入用户名密码。登录成功,跳转到门户首页,并在浏览器设置了cookie
- cookie: JSESSIONID=cF_Gfj2RueDzZJBn-SXbzUk1GI1BQezmIUGL5bbY; _languageType=zh_CN; portal.local=zh_CN; OPSMGRCASTGC=TGT-118-FH7kYNA1qBkWXz9zw9sDLguPN3cdcLNLPnEnqwx2APRYEHeT6J-cas; CASTGC=TGT-564-aweV71dfqBkldz9zI9oLtjEPNtuydcLiLadEnqwx2APILEINOcT-cas
访问isupm,用户已登录
- 访问 https://192.168.0.100/isupm/user,请求头带上了cookie,isupm服务的session中没有用户信息,去cas认证
- 重定向 https://192.168.0.100/portal/cas/login?service=https://192.168.0.100/isupm/user
- 重定向 https://192.168.0.100/bic/ssoService/v1/casLogin?service=https://192.168.0.100/isupm/user
&login=https://192.168.0.100:443/portal/cas/loginPage
&home=https://192.168.0.100:443/portal,cas根据TGC从TGT获取用户信息,根据service参数生成一个ST - 重定向 https://192.168.0.100/isupm/user&ticket=ST-43379-YRggzOtYNIMXhrebBPBM-cas,isupm拿到ST,去cas验证ticket是否有效,cas确认后返回该用户的身份信息,isupm将用户信息写到session,并返回页面信息
- 重定向https://192.168.0.100/isupm/user,能正常访问页面