Apache cxf OAuth2 @Scopes注释方法不起作用

时间:2017-01-11 05:56:02

标签: apache web-services jax-rs cxf oauth2

我正在使用Apache cxf OAuth2来保护我的jax-rs API。我使用的是cxf 3.1.5版本。正如文档here

中所述

从Apache cxf 3.1.5开始@Scopes可用于更精细的范围处理。 我已成功为特定的已批准范围生成访问令牌。当我尝试使用此令牌访问我的API时,理想情况下它不应该允许我访问API,因为它具有@Scopes注释中提到的不同访问范围。但是它允许我访问这个API。

这是我的API:

@GET
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Path("/exportSheets")
@Scopes("testScope1")
@ConfidentialClient
String exportSheets(@QueryParam("userId") Integer userId);

这是我用来访问此API的访问令牌

    {
    "tokenKey": "f2154782f82947318d1fc363e4309fa6",
    "tokenType": "Bearer",
    "expiresIn": 3600,
    "issuedAt": -1,
    "parameters": {},
    "approvedScope": "read"
    }

如您所见,令牌包含approvedScope为read,其中API为testScope1。即使这个范围不匹配,它也允许我访问我的API。

这是我为创建服务器端点所做的测试配置。

@Bean
@DependsOn("cxf")
public Server ornateTestAPIs(){
    JAXRSServerFactoryBean factory=jaxRSServerFactory();

    factory.setAddress("/test");

    factory.setServiceBeans(Arrays.asList(testApis));
    factory.setProviders(Arrays.asList(jsonProvider(), new VcAPIExceptionMapper(), oauthRequestFilter(), oauthScopesFilter());
    factory.setFeatures(Arrays.asList(swaggerFeature(), timingFeature));
    factory.setInInterceptors(
            Arrays.<Interceptor<? extends Message>>asList(new JAXRSBeanValidationInInterceptor()));
    factory.setOutInterceptors(
            Arrays.<Interceptor<? extends Message>>asList(new JAXRSBeanValidationOutInterceptor()));
    return factory.create();
}

public OAuthRequestFilter oauthRequestFilter(){
    OAuthRequestFilter requestFilter=new OAuthRequestFilter();
    requestFilter.setDataProvider(oAuthDataProviderImpl());
    return requestFilter;
}
public OAuthScopesFilter oauthScopesFilter(){
    return new OAuthScopesFilter();
}

如您所见,我在提供程序中添加了OAuthScopeFilter和OAuthRequestFilter。 这是我的pom

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-rs-security-oauth2</artifactId>
    <version>3.1.9</version>
</dependency>
<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-rs-security-cors</artifactId>
    <version>3.1.9</version>
</dependency>
<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-frontend-jaxrs</artifactId>
    <version>3.1.5</version>
</dependency>
<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-rs-service-description</artifactId>
    <version>3.1.5</version>
</dependency>

0 个答案:

没有答案