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

作者:刘宾, thomas_liub@hotmail.com
请尊重作者著作权,转载请注明出处,谢谢!


系统组成图

单点登陆流程

用户首次登陆访问

  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()方法
    • 当前端服务调用后端服务时,可以设置当前用户
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容