我们需要实现此端点,因为我们有许多需要验证令牌的微服务。
根据this link,我们可以使用它来返回一些用户详细信息以及验证令牌。
我查看了春季文档但无法找到任何内容。我们如何实现它,以便任何请求自动调用内省端点。我在这里问这个问题是因为我想听听别人的经验和建议。
答案 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。
我正在尝试使用博客提供有关供应商和库选择等方面的可靠建议,并以开发人员理解的方式解释事物。
如果您发现任何不清楚或想要了解更多信息,请随时在我的博客上发布问题/评论。
此致
加里