xbm*_*ono 6 spring-security access-token oauth-2.0 spring-boot
我们需要实现此端点,因为我们有许多需要验证令牌的微服务。
根据此链接,我们可以使用它返回一些用户详细信息以及验证令牌。
我浏览了Spring文档,但找不到任何东西。我们如何实现这一点,以便任何请求都自动调用自省端点。我在这里问这个问题是因为我想听听人们的经验和建议。
好的,在挖掘 Spring 源代码和文档之后,我想我已经找到了答案,我将其发布在这里以防万一有人有同样的问题。
Spring 有一个名为/check_token. 从我在CheckTokenEndpoint课堂上看到的,它是根据 OAuth2 令牌自省端点设计的:端点的唯一参数是“令牌”。
所以第一件事是让端点可以访问:
@Override
public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
security.checkTokenAccess("isAuthenticated()").tokenKeyAccess("permitAll()").passwordEncoder(passwordEncoder());
}
Run Code Online (Sandbox Code Playgroud)
如您所见,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;
}
Run Code Online (Sandbox Code Playgroud)
就是这样!
但是,我发现这个端点并不符合规范。在 OAuth2 中,它提到响应中必须使用 boolean 类型的节点“active”,而该端点基本上提取访问令牌。但是,您可以创建自己的端点并仅配置RemoteTokenServicesSpring 以进行调用
| 归档时间: |
|
| 查看次数: |
2409 次 |
| 最近记录: |