如何在 Spring Boot 中通过令牌自省端点实现令牌验证?
Posted
技术标签:
【中文标题】如何在 Spring Boot 中通过令牌自省端点实现令牌验证?【英文标题】:How to implement token verification via token introspection endpoint in Spring Boot? 【发布时间】:2018-05-24 11:04:13 【问题描述】:我们需要实现这个端点,因为我们有许多需要验证令牌的微服务。
根据this link,我们可以使用它来返回一些用户详细信息以及验证令牌。
我浏览了 spring 文档,但找不到任何东西。我们如何实现这一点,以便任何请求自动调用自省端点。我在这里问这个是因为我想听听人们对此的经验和建议。
【问题讨论】:
【参考方案1】:好的,在挖掘了 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 中,它提到布尔类型的节点“活动”在响应中是强制性的,而该端点基本上提取访问令牌。但是,您可以创建自己的端点,只需为 Spring 配置 RemoteTokenServices
即可进行调用
【讨论】:
如果认证服务器不同怎么办。在我的情况下,客户端直接从身份验证服务器获取其访问令牌,然后使用该访问令牌调用我的微服务(资源服务器)。知道如何验证访问令牌吗?我有身份验证服务器的 Introspection URL @RajShah 不就是用你的 url 替换代码中的 localhost 吗? 现在可以了,授权服务器实际上已经关闭了以上是关于如何在 Spring Boot 中通过令牌自省端点实现令牌验证?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring Boot 后端使用 jwt 令牌实现注销功能(使用休息端点)
如何在spring security oauth2授权服务器中通过jwt令牌获取用户信息?
Spring Boot中使用Actuator的/info端点输出Git版本信息