分布式架构设计-安全认证与鉴权 &SSO & 分布式Session & JWT & OAUTH

  1. http://www.infoq.com/cn/articles/identity-authentication-of-architecture-in-micro-service

微服务架构下,要考虑外部应用接入的场景、用户 - 服务的鉴权、服务 - 服务的鉴权等多种鉴权场景。

微服务常见安全认证方案:

  1. HTTP 基本认证
  2. 基于服务端 Session 的认证(分布式Session. e.g. Spring Session)
  3. 基于 客户端Token 的认证: Token 和 Session ID 不同,并非只是一个 key。Token 一般会包含用户的相关信息,通过验证 Token 就可以完成身份校验。
  4. 基于 Token 认证的好处如下:
  • 服务端无状态:Token 机制在服务端不需要存储 session 信息,因为 Token 自身包含了所有用户的相关信息。
  • 性能较好,因为在验证 Token 时不用再去访问数据库或者远程服务进行权限校验,自然可以提升不少性能。
  • 支持移动设备。
  • 支持跨程序调用,Cookie 是不允许垮域访问的,而 Token 则不存在这个问题。
  • 两种基于 Token 的认证方案 JWT/Oauth2.0。
  • 思考总结
    正如 David Borsos 所建议的一种方案,在微服务架构下,我们更倾向于将 Oauth 和 JWT 结合使用,Oauth 一般用于第三方接入的场景,管理对外的权限,所以比较适合和 API 网关结合,针对于外部的访问进行鉴权(当然,底层 Token 标准采用 JWT 也是可以的)。JWT 更加轻巧,在微服务之间进行访问鉴权已然足够,并且可以避免在流转过程中和身份认证服务打交道。当然,从能力实现角度来说,分布式 Session 在很多场景下也是完全能满足需求,具体怎么去选择鉴权方案,还是要结合实际的需求来。

 

 

  1. 不要用JWT替代session管理(上):全面了解Token,JWT,OAuth,SAML,SSO
  2. http://blog.didispace.com/learn-how-to-use-jwt-xjf/
  3. https://www.bonjourcs.com/2017/12/19/%E5%88%AB%E5%86%8D%E7%94%A8-JWT-%E5%81%9A%E4%BC%9A%E8%AF%9D%E7%AE%A1%E7%90%86%E4%BA%86/
  4. 从有状态应用(Session)到无状态应用(JWT),以及 SSO 和 OAuth2
  5. OAuth 2和JWT - 如何设计安全的API?
  6. https://www.cnblogs.com/xiekeli/p/5607107.html

对Token认证的五点认识

  1. 一个Token就是一些信息的集合;
  2. 在Token中包含足够多的信息,以便在后续请求中减少查询数据库的几率
  3. 服务端需要对cookie和HTTP Authrorization Header进行Token信息的检查;
  4. 基于上一点,你可以用一套token认证代码来面对浏览器类客户端和非浏览器类客户端
  5. 因为token是被签名的,所以我们可以认为一个可以解码认证通过的token是由我们系统发放的,其中带的信息是合法有效的;

 

你可能感兴趣的:(分布式架构设计-安全认证与鉴权 &SSO & 分布式Session & JWT & OAUTH)