从JdbcTokenStore访问令牌的查询

时间:2018-03-19 18:42:28

标签: spring-boot spring-security-oauth2

我是 Spring Boot和Oauth 的新手,我正在我的系统上实现Oauth Security,我怀疑 JdbcTokenStore查询

我在 JdbcTokenStore 代码中看到DEFAULT_ACCESS_TOKEN_SELECT_STATEMENT = "select token_id, token from oauth_access_token where token_id =?"

我尝试使用client_id1从oauth / token获取令牌,然后使用client_id2检查了令牌,最后我收到了成功的响应,因为它只是过滤了token_id。

我期待一个像“未找到令牌”或类似的错误。

此查询是否有此行为?

更新

我的授权服务器 ResourceServer 已分隔,在我的 AuthorizationServer 上我从数据库获取ClientDetails并且我有两个条目:< / p>

client_details_entries

在我的Web应用程序中,我使用第一个ClientDetails获取有效令牌:

$ curl seiafiscalizacao:seiafiscalizacao123@localhost:8080/seia-auth-server/oauth/token -d grant_type=password -d username=username -d password=pwd

在oauth_access_token上我得到了一个新的条目,将token_id与client_id相关联:

access_token_entry

在我的 ResourceServer 上,我有一个带有这些配置的RemoteTokenServices(第二个ClientDetails):

@Bean
@Primary
public RemoteTokenServices tokenService() {

    RemoteTokenServices tokenService = new RemoteTokenServices();
    tokenService.setCheckTokenEndpointUrl("http://localhost:8080/seia-auth-server/oauth/check_token");
    tokenService.setClientId("seiafiscalizacao2");
    tokenService.setClientSecret("seiafiscalizacao123");
    return tokenService;
}

最后,当我尝试从 ResourceServer 获取任何资源时,即使使用不同的client_id,我也会获得成功响应:

success_from_resourceserver_?

当我从org.springframework.security.oauth2.provider.token.store打开 JdbcTokenStore 代码时,我看到了private static final String DEFAULT_ACCESS_TOKEN_SELECT_STATEMENT = "select token_id, token from oauth_access_token where token_id = ?";,并找出了为什么我取得了成功。

我没有收到任何错误或异常,但我想知道用不同的client_id检查我的令牌并获得成功。

就像我之前说过的那样,我是Oauth的新人,我不知道这是否是预期的。

要访问ResourceServer,我正在使用Firefox中的RESTClient

我的SpringBoot版本是1.5.10.RELEASE

我的应用服务器是Wildfly 10.1

到目前为止,我的项目分享起来非常复杂,但是如果你需要我可以用后面的东西做一些新的东西。

1 个答案:

答案 0 :(得分:0)

OAuth2规范没有定义,请参阅RFC 6749

  

<强> 10.3。访问令牌

     

[...]

     

此规范未提供资源服务器的任何方法,以确保授权服务器向给定客户端发出访问令牌。

因此,Spring Security OAuth2不会检查它。

此外,RemoteTokenServices是一个Spring Security OAuth2功能,完全不受OAuth2规范的约束,请参阅OAuth 2 Developers Guide

  

另一种选择是RemoteTokenServices,它是Spring OAuth功能(不是规范的一部分),允许资源服务器通过授权服务器(/oauth/check_token)上的HTTP资源解码令牌。