一 注解 @EnableResourceServer 的配置
1.1 配置资源服务
1.1.1 使用
使用注解@EnableResourceServer
注解到一个
@Configuration
配置类上,并且必须使用
ResourceServerConfigurer
这个 配置对象来进行配置(可以选择继承自 ResourceServerConfigurerAdapter
然后覆写其中的方法,参数就是这个 对象的实例)
1.1.2 属性介绍
下面是一些可以配置的属性:
ResourceServerSecurityConfigurer
中主要包括:
tokenServices
:
ResourceServerTokenServices
类的实例,用来实现令牌服务。
tokenStore
:
TokenStore
类的实例,指定令牌如何访问,与
tokenServices
配置可选
resourceId
:这个资源服务的
ID
,这个属性是可选的,但是推荐设置并在授权服务中进行验证。
其他的拓展属性例如
tokenExtractor
令牌提取器用来提取请求中的令牌。
HttpSecurity
配置与
Spring Security
类似: 请求匹配器,用来设置需要进行保护的资源路径,默认的情况下是保护资源服务的全部路径。
通过
http.authorizeRequests()
来设置受保护资源的访问规则 ,其他的自定义权限保护规则通过 HttpSecurity
来进行配置。
@EnableResourceServer
注解自动增加了一个类型为
OAuth2AuthenticationProcessingFilter
的过滤器链 。
1.1.3 配置操作
新建一个ResouceServerConfig配置类,加上注解
@EnableResourceServer
1.2 验证令牌token
1.2.1 属性配置
ResourceServerTokenServices
是组成授权服务的另一半。
1.
如果你的授权服务和资源服务在同一个应用程序上的
话,你可以使用
DefaultTokenServices
,这样的话,你就不用考虑关于实现所有必要的接口的一致性问题。
2.
如果你的授权服务和资源服务是分离开的,那么你就必须要确保能够
有匹配授权服务提供的 ResourceServerTokenServices
,
它知道如何对令牌进行解码
。
3.令牌解析方法: 使用
DefaultTokenServices
在资源服务器本地配置令牌存储、解码、解析方式。
4.
使用
RemoteTokenServices
资源服务器通过
HTTP
请求来解码令牌,
每次都请求授权服务器端点 /oauth/check_token,使用授权服务的 /oauth/check_token 端点,你需要在授权服务将这个端点暴露出去,以便资源服务可以进行访问
我们在授权服务(spt-ds-uaa-server
)中配置了 /oauth/check_token 和 /oauth/token_key
这两个端点
1.2.2 代码操作
在资源 服务配置
RemoteTokenServices
,在
ResouceServerConfifig
中配置:
1.3 配置安装策略
1.4 编写资源
1.5 启动服务测试
1.5 .1 启动服务
1.5 .2 使用授权码方式获取token
2.登录
3.授权
4.授权码:fkg8a5
5.获取token:67a44089-8343-48a5-ba6d-60df43d03cd7
1.5 .3 携带token访问资源
按照
oauth2.0
协议要求,请求资源需要携带
token
,如下:
token
的参数名称为:
Authorization
,值为:
Bearer token
值
访问地址:
请求方式:GET
参数:Authorization Bearer 67a44089-8343-48a5-ba6d-60df43d03cd7
Bearer+空格 +上面求得的token值
1.5 .4 验证token
http://localhost:53020/uaa/oauth/check_token
方式:post
参数: token=67a44089-8343-48a5-ba6d-60df43d03cd7
1.5 .5 遇到坑
启动类放到了和controller平级的子目录里,造成访问资源不成功!
后来发现此问题,将controller,config等目录均放到oauth目录下,将启动类OrderApp和这些目录作为平级,成功解决了问题: