oauth2.0–基础–02–基于token的认证方式
1、优点
- 服务端不用存储认证数据,易维护扩展性强
- 客户端可以把token存在任意地方、
- 适合统一认证的机制,客户端、一方应用、三方应用都遵循一致的认证机制
- token认证方式对第三方应用接入更适合,因为它更开放,可使用当前有流行的开放协议Oauth2.0、JWT等。
- 一般情况服务端无需存储会话信息,减轻了服务端的压力。
2、缺点
- token由于自包含信息,因此一般数据量较大,而且每次请求都需要传递,因此比较占带宽。
- token的签名验签操作会给cpu带来额外的处理负担
3、分布式系统认证技术方案见下图
3.1、流程描述
- 用户通过接入方(应用)登录,接入方采取OAuth2.0方式在统一认证服务(UAA)中认证。
- 认证服务(UAA)验证该用户的身份是否合法,并获取用户权限信息。
- 认证服务(UAA)获取接入方权限信息,并验证接入方是否合法。
- 若登录用户以及接入方都合法,认证服务生成jwt令牌返回给接入方,其中jwt中包含了用户权限及接入方权限。
- 后续,接入方携带jwt令牌对API网关内的微服务资源进行访问。
- API网关对令牌解析、并验证接入方的权限是否能够访问本次请求的微服务。
- 如果接入方的权限没问题,API网关将原请求header中附加解析后的明文Token,并将请求转发至微服务。
- 微服务收到请求,明文token中包含登录用户的身份和权限信息。
3.2、后续微服务干两件事:
- 用户授权拦截(看当前用户是否有权访问该资源)
- 将用户信息存储进当前线程上下文(有利于后续业务逻辑随时获取当前用户信息)
4、spring-Security-OAuth2
- 对OAuth2的一种实现
-
提供两个服务
- 认证服务: AuthorizationServer
- 资源服务:ResourceServer
4.1、认证服务: AuthorizationServer
- 包含对接入端以及登入用户的合法性进行验证并颁发token等功能
-
对令牌的请求端点由SpringMVC控制器进行实现,下面是配置一个认证服务必须要实现的endpoints
-
AuthorizationEndpoint:认证请求
- 默认url:/oauth/authorize
-
TokenEndpoint:访问令牌的请求
- 默认url:/oauth/token
-
AuthorizationEndpoint:认证请求
4.2、资源服务:ResourceServer
- 应包含对资源的保护功能,对非法请求进行拦截,对请求中token进行解析鉴权等
-
下面的过滤器用于实现OAuth2.0资源服务
- OAuth2AuthenticationProcessingFilter:用来对请求给出的身份令牌解析鉴权。
版权声明:本文为zhou920786312原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。