oauth2.0–基础–02–基于token的认证方式

  • Post author:
  • Post category:其他




oauth2.0–基础–02–基于token的认证方式




1、优点

  1. 服务端不用存储认证数据,易维护扩展性强
  2. 客户端可以把token存在任意地方、
  3. 适合统一认证的机制,客户端、一方应用、三方应用都遵循一致的认证机制
  4. token认证方式对第三方应用接入更适合,因为它更开放,可使用当前有流行的开放协议Oauth2.0、JWT等。
  5. 一般情况服务端无需存储会话信息,减轻了服务端的压力。



2、缺点

  1. token由于自包含信息,因此一般数据量较大,而且每次请求都需要传递,因此比较占带宽。
  2. token的签名验签操作会给cpu带来额外的处理负担



3、分布式系统认证技术方案见下图

在这里插入图片描述



3.1、流程描述

  1. 用户通过接入方(应用)登录,接入方采取OAuth2.0方式在统一认证服务(UAA)中认证。
  2. 认证服务(UAA)验证该用户的身份是否合法,并获取用户权限信息。
  3. 认证服务(UAA)获取接入方权限信息,并验证接入方是否合法。
  4. 若登录用户以及接入方都合法,认证服务生成jwt令牌返回给接入方,其中jwt中包含了用户权限及接入方权限。
  5. 后续,接入方携带jwt令牌对API网关内的微服务资源进行访问。
  6. API网关对令牌解析、并验证接入方的权限是否能够访问本次请求的微服务。
  7. 如果接入方的权限没问题,API网关将原请求header中附加解析后的明文Token,并将请求转发至微服务。
  8. 微服务收到请求,明文token中包含登录用户的身份和权限信息。



3.2、后续微服务干两件事:

  1. 用户授权拦截(看当前用户是否有权访问该资源)
  2. 将用户信息存储进当前线程上下文(有利于后续业务逻辑随时获取当前用户信息)



4、spring-Security-OAuth2

  1. 对OAuth2的一种实现
  2. 提供两个服务

    1. 认证服务: AuthorizationServer
    2. 资源服务:ResourceServer



4.1、认证服务: AuthorizationServer

  1. 包含对接入端以及登入用户的合法性进行验证并颁发token等功能
  2. 对令牌的请求端点由SpringMVC控制器进行实现,下面是配置一个认证服务必须要实现的endpoints

    1. AuthorizationEndpoint:认证请求

      1. 默认url:/oauth/authorize
    2. TokenEndpoint:访问令牌的请求

      1. 默认url:/oauth/token



4.2、资源服务:ResourceServer

  1. 应包含对资源的保护功能,对非法请求进行拦截,对请求中token进行解析鉴权等
  2. 下面的过滤器用于实现OAuth2.0资源服务

    1. OAuth2AuthenticationProcessingFilter:用来对请求给出的身份令牌解析鉴权。



版权声明:本文为zhou920786312原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。