作者:刘宾, thomas_liub@hotmail.com
请尊重作者著作权,转载请注明出处,谢谢!
系统组成图
单点登陆流程
用户首次登陆访问
- 用户首次访问服务
- 服务网关(OpenIDConnect RP client)识别用户首次访问,并redirect到用户认证服务器(OpenIDConnect OP Server)
- 用户认证服务器识别用户首次访问,要求用户登陆
- 用户完成登陆
- 用户认证服务器分配授权码,并redirect请求回源服务
- 服务网关识别用户请求,持授权码向用户认证服务器索取访问令牌,用户ID令牌,如成功则追加用户信息到请求头,并传递请求到后续服务
- 后续服务(前端服务或后端服务)完成请求
- 服务网关和用户建立有效会话(cookie)
用户已经登陆认证服务器,首次访问其他服务
- 用户访问服务
- 服务网关识别用户首次访问,并redirect到用户认证服务器
- 用户认证服务器识别用户已经登陆,则直接分配授权码,并redirect请求回源服务
- 服务网关识别用户请求,持授权码向用户认证服务器索取访问令牌,用户ID令牌,如成功则追加用户信息到请求头,并传递请求到后续服务
- 后续服务(前端服务或后端服务)完成请求
- 服务网关和用户建立有效会话(cookie)
用户在该服务拥有有效会话后的后续访问
- 用户访问服务,携带有效会话ID(cookie)
- 服务网关识别会话,向认证服务器发起访问令牌验证请求
- 认真服务器识别访问令牌,回复用户信息
- 如有效访问令牌,则追加用户信息到请求头,并传递请求到后续服务;如无效访问令牌,则直接拒绝请求
用户登出
- 用户向任意服务发起登出请求,携带有效会话ID(cookie)
- 服务网关识别并完成用户会话清除,随后redirect登出请求到认证服务器
- 认证服务器完成用户会话清楚,随后redirect回源服务缺省网页
- 方案一,认证服务器清除该用户所有已颁发的访问令牌,即立即使所有相关服务失效
- 方案二,认证服务器保留该用户所有访问令牌,待其自行失效。访问令牌有效期为1小时
后续服务获取用户信息
- get_current_user()方法
- 返回user_id, user_name...
- set_current_user()方法
- 当前端服务调用后端服务时,可以设置当前用户
网友评论