Spring OAuth2 实现始终获取新的令牌
Spring
基于OAuth2
协议编写的spring-oauth2
实现,是行业级的接口资源安全解决方案,我们可以基于该依赖配置不同客户端的不同权限来访问接口数据。
Spring
基于OAuth2
协议编写的spring-oauth2
实现,是行业级的接口资源安全解决方案,我们可以基于该依赖配置不同客户端的不同权限来访问接口数据。
Spring
所提供的OAuth2
集成策略,支持多种方式存储认证信息
以及客户端信息
,由于在之前的文章中讲解使用时把知识点进行了拆分,有很多同学不太会组合使用,很多单独问我ApiBoot
所提供的OAuth2
的整合后,多个客户端该怎么配置?
使用Redis
来存储OAuth2
相关的客户端信息以及生成的AccessToken
是一个不错的选择,Redis
与生俱来的的高效率、集群部署是比较出色的功能,如果用来作为服务认证中心
的数据存储,可以大大的提高响应效率。
Redis
还支持超时自动删除功能,OAuth2
所生成的AccessToken
相关的数据在超过配置的有效时间
后就会自动被清除,这样也隐形的提高了接口的安全性。
既然Redis
可以做到这么好,我们该怎么实现代码逻辑呢?
OAuth2
所生成的AccessToken
以及RefreshToken
都存在过期时间,当在有效期内才可以拿来作为会话身份发起请求,否者认证中心
会直接拦截无效请求提示已过期
,那么我们怎么修改这个过期时间来满足我们的业务场景呢?
OAuth2
默认的AccessToken
是由DefaultAccessTokenConverter
生成,是具有唯一性的UUID
随机字符串,我们如果想要使用JWT
来格式化AccessToken
就需要使用JwtAccessTokenConverter
来进行格式化,当然如果你有自己独特的业务可以自己实现AccessTokenConverter
接口,并将实现类交付给IOC
托管即可。
当我们整合了Spring Security
以及OAuth2
后发现,有一些业务请求是需要开放的,因为种种原因这时访问者还没有身份标识(比如:用户刚来,还没有注册,需要进行新用户注册,这时注册业务相关的接口都应该是开放的
),下面我们来看看ApiBoot
是怎么排除路径不进行权限拦截的。
Spring
提供的原生的OAuth2
依赖内置了几种比较常用的授权方式:password
、authorization-code
、client_credentials
、refresh_token
、implicit
等,虽然可以满足我们日常的需求,不过针对一些特殊的需求还是捉襟见肘,有点无奈,比如:微信登录
、短信登录
…,针对这一点ApiBoot
通过修改Spring OAuth2
依赖的源码,可以根据业务进行自定义添加grantType
。
SpringSecurity
整合OAuth2
是开发者公认的资源保护
、服务认证
的最佳搭配伙伴,这对好基友一直在默默的守护着应用服务的安全,根据访问者的不同角色可以颗粒度控制到具体的接口,从而实现权限的细微划分。