当前位置: 代码迷 >> 综合 >> 【Spring Security OAuth2】客户端授权模式(client credentials)~校验访问令牌
  详细解决方案

【Spring Security OAuth2】客户端授权模式(client credentials)~校验访问令牌

热度:11   发布时间:2023-12-08 17:17:09.0

前文 【Spring Security OAuth2】客户端授权模式(client credentials)~资源服务配置 我们设定 授权服务 和 资源服务 是两个单独的应用,在 资源服务 中使用RemoteTokenServicesToken进行校验。
在这里插入图片描述
从图中可以看出,ResourceServerTokenServices接口有两个实现类(DefaultTokenServicesRemoteTokenServices),而DefaultTokenServices类同时实现了AuthorizationServerTokenServicesResourceServerTokenServices接口。
当 授权服务 和 资源服务 是两个单独的应用时,资源服务端使用RemoteTokenServices校验Token,而授权服务端使用DefaultTokenServices校验Token
当 授权服务 和 资源服务 是同一个应用时,使用DefaultTokenServices校验Token
在这里插入图片描述
ResourceServerTokenServices接口定义了两个方法,一个是根据指定的Token获取认证信息,另一个是根据指定的Token获取完整的Token详情。

在请求头中设置Authorization参数
将客户端ID和客户端密钥以 : 间隔进行拼接,然后将拼接后的字符串使用 BASE64 编码与Basic拼接,便可生成 Authorization 参数的值
在这里插入图片描述
设置完参数后像授权服务发送Token校验请求

通过AccessTokenConverter接口的extractAuthentication方法从请求结果中提取认证信息
在这里插入图片描述
AccessTokenConverter接口有多个实现类,由于我们在配置资源服务时并未指定AccessTokenConverter接口的实现类,故系统使用默认的实现类DefaultAccessTokenConverter
在这里插入图片描述
如果资源服务设置了resourceId且客户端详情中也设置了可访问的资源ID,则校验客户端详情中设置的可访问资源ID集合中是否包含当前资源ID
在这里插入图片描述

若资源服务端设置了clientDetailsService则校验认证信息中可访问的范围是否包含客户端可访问范围

在 【Spring Security OAuth2】客户端授权模式(client credentials)~资源服务配置 一文中,我们曾在application.properties文件中设置两个属性

security.oauth2.client.clientid=app
security.oauth2.client.clientSecret=app

这两个值与 我们获取Token时设置的值无关
在这里插入图片描述
调整application.properties文件中这两个属性为

security.oauth2.client.clientid=secret
security.oauth2.client.clientSecret=secret

当我们使用app获取访问令牌并访问资源resourceA时,可以正常访问
当我们使用secret获取访问令牌并访问资源resourceA时,无法访问
在这里插入图片描述

但属性文件中设置的那两个属性,必须在oauth_client_details表中存在

  相关解决方案