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(