|
@@ -38,9 +38,11 @@ import org.springframework.security.authentication.AuthenticationManager;
|
|
import org.springframework.security.authentication.AuthenticationManagerResolver;
|
|
import org.springframework.security.authentication.AuthenticationManagerResolver;
|
|
import org.springframework.security.oauth2.core.OAuth2AuthenticationException;
|
|
import org.springframework.security.oauth2.core.OAuth2AuthenticationException;
|
|
import org.springframework.security.oauth2.jose.TestKeys;
|
|
import org.springframework.security.oauth2.jose.TestKeys;
|
|
|
|
+import org.springframework.security.oauth2.jwt.JwtClaimNames;
|
|
|
|
|
|
import static org.assertj.core.api.Assertions.assertThat;
|
|
import static org.assertj.core.api.Assertions.assertThat;
|
|
import static org.assertj.core.api.Assertions.assertThatCode;
|
|
import static org.assertj.core.api.Assertions.assertThatCode;
|
|
|
|
+import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
|
|
import static org.mockito.Mockito.mock;
|
|
import static org.mockito.Mockito.mock;
|
|
import static org.springframework.security.oauth2.jwt.JwtClaimNames.ISS;
|
|
import static org.springframework.security.oauth2.jwt.JwtClaimNames.ISS;
|
|
|
|
|
|
@@ -85,6 +87,35 @@ public class JwtIssuerAuthenticationManagerResolverTests {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ @Test
|
|
|
|
+ public void resolveWhenIssuerFailsThenErrorNotCached() throws Exception {
|
|
|
|
+ try (MockWebServer server = new MockWebServer()) {
|
|
|
|
+ server.start();
|
|
|
|
+ String issuer = server.url("").toString();
|
|
|
|
+ // @formatter:off
|
|
|
|
+ server.enqueue(new MockResponse().setResponseCode(500)
|
|
|
|
+ .setHeader("Content-Type", "application/json")
|
|
|
|
+ .setBody(String.format(DEFAULT_RESPONSE_TEMPLATE, issuer, issuer))
|
|
|
|
+ );
|
|
|
|
+ server.enqueue(new MockResponse().setResponseCode(200)
|
|
|
|
+ .setHeader("Content-Type", "application/json")
|
|
|
|
+ .setBody(String.format(DEFAULT_RESPONSE_TEMPLATE, issuer, issuer))
|
|
|
|
+ );
|
|
|
|
+ // @formatter:on
|
|
|
|
+ JWSObject jws = new JWSObject(new JWSHeader(JWSAlgorithm.RS256),
|
|
|
|
+ new Payload(new JSONObject(Collections.singletonMap(JwtClaimNames.ISS, issuer))));
|
|
|
|
+ jws.sign(new RSASSASigner(TestKeys.DEFAULT_PRIVATE_KEY));
|
|
|
|
+ JwtIssuerAuthenticationManagerResolver authenticationManagerResolver = new JwtIssuerAuthenticationManagerResolver(
|
|
|
|
+ issuer);
|
|
|
|
+ MockHttpServletRequest request = new MockHttpServletRequest();
|
|
|
|
+ request.addHeader("Authorization", "Bearer " + jws.serialize());
|
|
|
|
+ assertThatExceptionOfType(IllegalArgumentException.class)
|
|
|
|
+ .isThrownBy(() -> authenticationManagerResolver.resolve(request));
|
|
|
|
+ AuthenticationManager authenticationManager = authenticationManagerResolver.resolve(request);
|
|
|
|
+ assertThat(authenticationManager).isNotNull();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
@Test
|
|
@Test
|
|
public void resolveWhenUsingUntrustedIssuerThenException() {
|
|
public void resolveWhenUsingUntrustedIssuerThenException() {
|
|
JwtIssuerAuthenticationManagerResolver authenticationManagerResolver =
|
|
JwtIssuerAuthenticationManagerResolver authenticationManagerResolver =
|