Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring启动资源服务器无效令牌_Java_Spring_Spring Boot_Oauth_Authorization - Fatal编程技术网

Java Spring启动资源服务器无效令牌

Java Spring启动资源服务器无效令牌,java,spring,spring-boot,oauth,authorization,Java,Spring,Spring Boot,Oauth,Authorization,我正在尝试为Spring项目配置OAuth2。我使用jdbc身份验证,我的授权服务器和资源服务器是两个独立的API。我现在的问题是微服务。我正在尝试使用这个共享授权服务器来验证微服务。我可以从令牌端点获取访问令牌 我可以从检查令牌端点检查访问令牌 我的资源服务器配置: @SpringBootApplication @EnableCircuitBreaker @EnableDiscoveryClient @EnableResourceServer public class ProductApi

我正在尝试为Spring项目配置OAuth2。我使用jdbc身份验证,我的授权服务器和资源服务器是两个独立的API。我现在的问题是微服务。我正在尝试使用这个共享授权服务器来验证微服务。我可以从令牌端点获取访问令牌

我可以从检查令牌端点检查访问令牌

我的资源服务器配置:

@SpringBootApplication
@EnableCircuitBreaker
@EnableDiscoveryClient
@EnableResourceServer
public class ProductApiServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(ProductApiServiceApplication.class, args);
    }
    
}
和application.yml:

security:
  oauth2:
    client:  
      client-id: saba-product-api-service
      client-secret: secret123 
    resource:
      id: saba-product-api-service
      token-info-uri: http://localhost:9999/uaa/oauth/check_token
和休息控制器:

    @GetMapping("/user/me")
    public Principal user(Principal principal) {
        return principal;
    } 
当我调用/user/me端点时,我得到了无效的\u令牌。

我的资源服务器日志:

和我的授权服务器日志:

我的代码有什么问题?

更新

问题在于此代码:

最后,我更换了

<dependency>
    <groupId>org.springframework.security.oauth</groupId>
    <artifactId>spring-security-oauth2</artifactId>
    <version>2.3.4.RELEASE</version>
</dependency>

我也有同样的问题。在我的例子中,我使用的是SpringCloudOAuth2,Hoxton.SR4发行版,它可以正常工作。因此,我改为Hoxton.SR6,这个问题被抛到了脑后。我的创作服务器也是一个Eureka的客户机,这个问题是由这种依赖性引起的。在Eureka客户机中有一个名为jackson dataformat xml的Dependentência,因为它将check_令牌端点的返回转换为xml而不是json。当RemoteTokenServices调用check_token时,结果是xml,它没有以正确的方式在映射中取消序列化。如果您有多个aud、范围或权限,它会选择最后一个。并将其活性属性表示为字符串。在我的案例中,我解决了授权服务器中不包括Eureka客户端提到的依赖项的问题,如下所示:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    <exclusions>
        <exclusion>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
        </exclusion>
    </exclusions>
</dependency>

org.springframework.cloud
spring cloud starter netflix eureka客户端
com.fasterxml.jackson.dataformat
jackson数据格式xml
        // gh-838
        if (map.containsKey("active") && !"true".equals(String.valueOf(map.get("active")))) {
            logger.debug("check_token returned active attribute: " + map.get("active"));
            throw new InvalidTokenException(accessToken);
        }
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    <exclusions>
        <exclusion>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
        </exclusion>
    </exclusions>
</dependency>