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

  • Post author:
  • Post category:其他


前文

【Spring Security OAuth2】客户端授权模式(client credentials)~资源服务配置

我们设定 授权服务 和 资源服务 是两个单独的应用,在 资源服务 中使用

RemoteTokenServices



Token

进行校验。

在这里插入图片描述

从图中可以看出,

ResourceServerTokenServices

接口有两个实现类(

DefaultTokenServices



RemoteTokenServices

),而

DefaultTokenServices

类同时实现了

AuthorizationServerTokenServices



ResourceServerTokenServices

接口。

当 授权服务 和 资源服务 是两个单独的应用时,资源服务端使用

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

表中存在



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