diff --git a/pom.xml b/pom.xml
index 9008dd4..3fc6d2e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -39,7 +39,7 @@
1.26.1
1.1.0
1.18.1
- 1.3.0
+ 1.4.0
1.23.0
2.5.5
diff --git a/src/main/java/io/gravitee/resource/oauth2/am/OAuth2AMResource.java b/src/main/java/io/gravitee/resource/oauth2/am/OAuth2AMResource.java
index b6f67fc..c6c969d 100644
--- a/src/main/java/io/gravitee/resource/oauth2/am/OAuth2AMResource.java
+++ b/src/main/java/io/gravitee/resource/oauth2/am/OAuth2AMResource.java
@@ -28,6 +28,7 @@
import io.gravitee.node.container.spring.SpringEnvironmentConfiguration;
import io.gravitee.resource.oauth2.am.configuration.OAuth2ResourceConfiguration;
import io.gravitee.resource.oauth2.api.OAuth2Resource;
+import io.gravitee.resource.oauth2.api.OAuth2ResourceException;
import io.gravitee.resource.oauth2.api.OAuth2Response;
import io.gravitee.resource.oauth2.api.openid.UserInfoResponse;
import io.vertx.core.AsyncResult;
@@ -189,7 +190,7 @@ public void introspect(String accessToken, Handler responseHandl
@Override
public void handle(Throwable event) {
logger.error("An error occurs while checking access token", event);
- responseHandler.handle(new OAuth2Response(false, event.getMessage()));
+ responseHandler.handle(new OAuth2Response(event));
}
}
)
@@ -204,7 +205,7 @@ public void handle(HttpClientRequest request) {
public void handle(AsyncResult asyncResponse) {
if (asyncResponse.failed()) {
logger.error("An error occurs while checking access token", asyncResponse.cause());
- responseHandler.handle(new OAuth2Response(false, asyncResponse.cause().getMessage()));
+ responseHandler.handle(new OAuth2Response(asyncResponse.cause()));
} else {
final HttpClientResponse response = asyncResponse.result();
logger.debug(
@@ -229,7 +230,16 @@ public void handle(AsyncResult asyncResponse) {
);
}
} else {
- responseHandler.handle(new OAuth2Response(false, buffer.toString()));
+ logger.error(
+ "An error occurs while checking access token. Request ends with status {}: {}",
+ response.statusCode(),
+ buffer.toString()
+ );
+ responseHandler.handle(
+ new OAuth2Response(
+ new OAuth2ResourceException("An error occurs while checking access token")
+ )
+ );
}
});
}
@@ -241,7 +251,7 @@ public void handle(AsyncResult asyncResponse) {
@Override
public void handle(Throwable event) {
logger.error("An error occurs while checking access token", event);
- responseHandler.handle(new OAuth2Response(false, event.getMessage()));
+ responseHandler.handle(new OAuth2Response(event));
}
}
)
diff --git a/src/test/java/io/gravitee/resource/oauth2/am/OAuth2AMResourceTest.java b/src/test/java/io/gravitee/resource/oauth2/am/OAuth2AMResourceTest.java
index 7ea3a8a..a5629d4 100644
--- a/src/test/java/io/gravitee/resource/oauth2/am/OAuth2AMResourceTest.java
+++ b/src/test/java/io/gravitee/resource/oauth2/am/OAuth2AMResourceTest.java
@@ -131,6 +131,7 @@ public void shouldNotValidateAccessToken() throws Exception {
accessToken,
oAuth2Response -> {
Assert.assertFalse(oAuth2Response.isSuccess());
+ Assert.assertEquals("An error occurs while checking access token", oAuth2Response.getPayload());
lock.countDown();
}
);
@@ -162,6 +163,31 @@ public void shouldNotValidateAccessToken_v2() throws Exception {
Assert.assertEquals(true, lock.await(10000, TimeUnit.MILLISECONDS));
}
+ @Test
+ public void shouldNotValidateAccessToken_v2_not_200() throws Exception {
+ String accessToken = "xxxx-xxxx-xxxx-xxxx";
+ stubFor(post(urlEqualTo("/domain/oauth/introspect")).willReturn(aResponse().withStatus(401)));
+
+ final CountDownLatch lock = new CountDownLatch(1);
+
+ Mockito.when(configuration.getSecurityDomain()).thenReturn("domain");
+ Mockito.when(configuration.getVersion()).thenReturn(OAuth2ResourceConfiguration.Version.V2_X);
+ Mockito.when(configuration.getServerURL()).thenReturn("http://localhost:" + wireMockRule.port());
+
+ resource.doStart();
+
+ resource.introspect(
+ accessToken,
+ oAuth2Response -> {
+ Assert.assertFalse(oAuth2Response.isSuccess());
+ Assert.assertEquals("An error occurs while checking access token", oAuth2Response.getPayload());
+ lock.countDown();
+ }
+ );
+
+ Assert.assertEquals(true, lock.await(10000, TimeUnit.MILLISECONDS));
+ }
+
@Test
public void shouldGetUserInfo() throws Exception {
stubFor(