如何在Spring Boot中通过令牌内省端点实现令牌验证?

时间:2017-12-10 22:34:07

标签: spring-boot spring-security oauth-2.0 access-token

我们需要实现此端点,因为我们有许多需要验证令牌的微服务。

根据this link,我们可以使用它来返回一些用户详细信息以及验证令牌。

我查看了春季文档但无法找到任何内容。我们如何实现它,以便任何请求自动调用内省端点。我在这里问这个问题是因为我想听听别人的经验和建议。

2 个答案:

答案 0 :(得分:2)

好的,在挖掘Spring源代码和文档之后,我想我找到了答案,我在这里发帖,以防万一有人有同样的问题。

Spring有一个名为/check_token的端点。根据我在CheckTokenEndpoint类中看到的内容,它是根据OAuth2 Token Introspection Endpoint设计的:端点的唯一参数是'token'。

首先,让端点可以访问:

@Override
public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
    security.checkTokenAccess("isAuthenticated()").tokenKeyAccess("permitAll()").passwordEncoder(passwordEncoder());
}

如您所见checkTokenAccess()允许任何经过身份验证的请求来访问它。请勿使用permitAll()

现在,在您的微服务或需要调用此端点的任何应用程序中,您需要配置RemoteTokenServices:

@Bean
@Conditional(IfCheckTokenIsEnabled.class)
public ResourceServerTokenServices createResourceServerTokenServices() {
    RemoteTokenServices tokenServices = new RemoteTokenServices();
    tokenServices.setCheckTokenEndpointUrl("http://localhost:8099/oauth/check_token");
    tokenServices.setClientId("my_client_id");
    tokenServices.setClientSecret("client_secret"); //cannot be null

    return tokenServices;
}

就是这样!

但是,我发现这个端点并不符合规范。在OAuth2中,它提到了boolean类型的节点“active”在响应中是必需的,而此端点基本上提取了访问令牌。但是,您可以创建自己的端点,并为Spring配置RemoteTokenServices以进行调用

答案 1 :(得分:1)

我已经写了一些关于此的博客文章,你可能会觉得有用:

我猜你想要的是一种从微服务中外部化令牌验证的方法,然后获得常见的用户信息/声明,并有效地做到这一点。

如果您对某些技术不熟悉,可以查看Index Page和第一个Code Sample

我正在尝试使用博客提供有关供应商和库选择等方面的可靠建议,并以开发人员理解的方式解释事物。

如果您发现任何不清楚或想要了解更多信息,请随时在我的博客上发布问题/评论。

此致

加里