微服务架构中,基于OpenIDConnect协议的NGINX单点登录实现

作者:刘宾, [email protected]
请尊重作者著作权,转载请注明出处,谢谢!


系统组成图

微服务架构中,基于OpenIDConnect协议的NGINX单点登录实现_第1张图片

单点登陆流程

用户首次登陆访问

  1. 用户首次访问服务
  2. 服务网关(OpenIDConnect RP client)识别用户首次访问,并redirect到用户认证服务器(OpenIDConnect OP Server)
  3. 用户认证服务器识别用户首次访问,要求用户登陆
  4. 用户完成登陆
  5. 用户认证服务器分配授权码,并redirect请求回源服务
  6. 服务网关识别用户请求,持授权码向用户认证服务器索取访问令牌,用户ID令牌,如成功则追加用户信息到请求头,并传递请求到后续服务
  7. 后续服务(前端服务或后端服务)完成请求
  8. 服务网关和用户建立有效会话(cookie)

用户已经登陆认证服务器,首次访问其他服务

  1. 用户访问服务
  2. 服务网关识别用户首次访问,并redirect到用户认证服务器
  3. 用户认证服务器识别用户已经登陆,则直接分配授权码,并redirect请求回源服务
  4. 服务网关识别用户请求,持授权码向用户认证服务器索取访问令牌,用户ID令牌,如成功则追加用户信息到请求头,并传递请求到后续服务
  5. 后续服务(前端服务或后端服务)完成请求
  6. 服务网关和用户建立有效会话(cookie)

用户在该服务拥有有效会话后的后续访问

  1. 用户访问服务,携带有效会话ID(cookie)
  2. 服务网关识别会话,向认证服务器发起访问令牌验证请求
  3. 认真服务器识别访问令牌,回复用户信息
  4. 如有效访问令牌,则追加用户信息到请求头,并传递请求到后续服务;如无效访问令牌,则直接拒绝请求

用户登出

  1. 用户向任意服务发起登出请求,携带有效会话ID(cookie)
  2. 服务网关识别并完成用户会话清除,随后redirect登出请求到认证服务器
  3. 认证服务器完成用户会话清楚,随后redirect回源服务缺省网页
    1. 方案一,认证服务器清除该用户所有已颁发的访问令牌,即立即使所有相关服务失效
    2. 方案二,认证服务器保留该用户所有访问令牌,待其自行失效。访问令牌有效期为1小时

后续服务获取用户信息

  • get_current_user()方法
    • 返回user_id, user_name...
  • set_current_user()方法
    • 当前端服务调用后端服务时,可以设置当前用户

你可能感兴趣的:(微服务架构中,基于OpenIDConnect协议的NGINX单点登录实现)