Skip to content

4quard/flask-sso-base_session

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SSO单点登录系统

基于flask,以及通过session识别用户

该方案通过跳转sso服务器地址来记录同一个用户的信息,通过设置一个用户sid(session),并将其绑定到子系统web-1生成的token,当用户通过该token进行请求时,就能对应上用户信息。

时序图:

原理步骤:

流程

第一次访问:

  1. 用户首先访问web-1子系统,系统检查用户的cookie中是否已经有一个token,没有就另外生成一个(随意设置,或者通过随机算法生成)。
  2. token设置到cookie,发起GET请求到SSO服务器,请求参数包含tokenweb-1识别标志(可选),next_url(请求完后跳转到某一个地址)。
  3. SSO服务器验证请求的可靠性,生成用户sid,将其保存到session(cookie)中,以此对应一个用户的登录信息。将用户的tokensid绑定到一起,保存到数据库,以后可以通过该token查询sid对应的信息。SSO设置重定向到next_url
  4. 重定向到web-1子系统,web-1cookie获取用户token,并以此发起请求用户信息到SSOSSO通过token查询sid,获取用户信息(现在为空),返回给web-1web-1进行用户信息处理,返回界面。
  5. 用户请求web-1登录界面,提交登录信息。web-1SSO发起登录请求,参数为用户登录信息,用户tokenSSO验证登录信息,登录成功后将用户信息保存到token对应的sid对应的数据结构中,返回用户信息。
  6. web-1对用户信息进行处理,返回界面。

至此用户信息创建,并保存到SSO服务器中,子系统web-1通过用户token就能获取到对应的sid,以此就能获取对应的用户信息。

web-2子系统,通过步骤1生成一个token-2,设置到cookie,并重定向到SSO中,现在SSO通过session或者cookie发现该用户已经通过其他子系统生成了sid,然后将该用户在web-2子系统生成的用户token-2sid绑定到一起,这样web-2子系统也能通过用户token-2来获取同一个用户sid对应的信息了。

环境

python依赖:flaskPyJWT(用于生成token)

nginx:本地hosts设置3个虚拟域名,example-1.comexample-2.comexample-sso.com,通过nginx转发。

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors