Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

单点登录SSO流程总结 #48

Open
xszi opened this issue May 7, 2021 · 0 comments
Open

单点登录SSO流程总结 #48

xszi opened this issue May 7, 2021 · 0 comments

Comments

@xszi
Copy link
Owner

xszi commented May 7, 2021

图来源
主要根据工作中接触项目总结

准备

说到单点登录,先要了解CAS (Central Authentication Service),下面说说CAS的实现流程。

CAS将登录单独抽取成系统出来。现在我们有两个系统,分别是www.java3y.comwww.java4y.com,一个SSOwww.sso.com

image

首先

用户想要访问系统A(www.java3y.com)受限的资源(比如说购物车功能,购物车功能需要登录后才能访问),系统A(www.java3y.com)发现用户并没有登录,于是重定向到sso认证中心,并将自己的地址作为参数。请求的地址如下:

www.sso.com?service=www.java3y.com

sso认证中心发现用户未登录,将用户引导至登录页面,用户进行输入用户名和密码进行登录,用户与认证中心建立全局会话(生成一份Token,写到Cookie中,保存在浏览器上

image

接着

认证中心重定向回系统A,并把Token携带过去给系统A,重定向的地址如下:

www.java3y.com?token=xxxxxxx

系统Asso认证中心验证这个Token是否正确,如果正确,则系统A和用户建立局部会话(创建Session)。到此,系统A和用户已经是登录状态了。

image

再接着

用户想要访问系统B(www.java4y.com)受限的资源(比如说订单功能,订单功能需要登录后才能访问),系统B(www.java4y.com)发现用户并没有登录,于是重定向到sso认证中心,并将自己的地址作为参数。请求的地址如下:

www.sso.com?service=www.java4y.com

注意:因为之前用户与认证中心www.sso.com已经建立了全局会话(当时已经把Cookie保存到浏览器上了),所以这次系统B重定向到认证中心www.sso.com是可以带上Cookie的。

认证中心根据带过来的Cookie发现已经与用户建立了全局会话了,认证中心重定向回系统B,并把Token携带过去给系统B,重定向的地址如下:

www.java4y.com?token=xxxxxxx

最后

系统Bsso认证中心验证这个Token是否正确,如果正确,则系统B和用户建立局部会话(创建Session)。到此,系统B和用户已经是登录状态了。

image

总结

  • SSO认证中心类似一个中转站
  • 去认证中心需带上当前系统地址,后续登录操作后(带上token)重定向回原来系统
  • 重定向回原来系统带上token信息,有多种方式,一种如上述,通过地址链接传值;另外一种可以通过重定向设置请求头headers
  • 并非直接通过cookie验证登录状态,所以不会存在跨站请求伪造问题
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant