【问题标题】:How to implement token verification via token introspection endpoint in Spring Boot?如何在 Spring Boot 中通过令牌自省端点实现令牌验证?
【发布时间】:2018-05-24 11:04:13
【问题描述】:

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

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

我浏览了 spring 文档,但找不到任何东西。我们如何实现这一点,以便任何请求自动调用自省端点。我在这里问这个是因为我想听听人们对此的经验和建议。

【问题讨论】:

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


    【解决方案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 吗?
    • 现在可以了,授权服务器实际上已经关闭了
    猜你喜欢
    • 2021-10-04
    • 2020-05-26
    • 2018-01-17
    • 2018-09-27
    • 2014-03-08
    • 2017-09-13
    • 1970-01-01
    • 1970-01-01
    • 2020-04-23
    相关资源
    最近更新 更多