@Inject public KeycloakJwkProvider(KeycloakSettings keycloakSettings) throws MalformedURLException { final String jwksUrl = keycloakSettings.get().get(KeycloakConstants.JWKS_ENDPOINT_SETTING); if (jwksUrl == null) { throw new ConfigurationException("Jwks endpoint url not found in keycloak settings"); } this.jwkProvider = new GuavaCachedJwkProvider(new UrlJwkProvider(new URL(jwksUrl))); }
@Test public void shouldGetBaseProvider() throws Exception { assertThat(provider.getBaseProvider(), equalTo(fallback)); } }
@Test public void shouldCreateCachedAndRateLimitedProviderByDefault() { JwkProvider provider = new JwkProviderBuilder(domain).build(); assertThat(provider, notNullValue()); assertThat(provider, instanceOf(GuavaCachedJwkProvider.class)); JwkProvider baseProvider = ((GuavaCachedJwkProvider) provider).getBaseProvider(); assertThat(baseProvider, instanceOf(RateLimitedJwkProvider.class)); assertThat(((RateLimitedJwkProvider) baseProvider).getBaseProvider(), instanceOf(UrlJwkProvider.class)); }
/** * Creates a {@link JwkProvider} * * @return a newly created {@link JwkProvider} */ public JwkProvider build() { JwkProvider urlProvider = new UrlJwkProvider(url); if (this.rateLimited) { urlProvider = new RateLimitedJwkProvider(urlProvider, bucket); } if (this.cached) { urlProvider = new GuavaCachedJwkProvider(urlProvider, cacheSize, expiresIn, expiresUnit); } return urlProvider; } }
@Test public void shouldCreateCachedProvider() { JwkProvider provider = new JwkProviderBuilder(domain) .rateLimited(false) .cached(true) .build(); assertThat(provider, notNullValue()); assertThat(provider, instanceOf(GuavaCachedJwkProvider.class)); assertThat(((GuavaCachedJwkProvider) provider).getBaseProvider(), instanceOf(UrlJwkProvider.class)); }
@Test public void shouldCacheWhenIdMatchesDefaultMissingIdKey() throws Exception { when(fallback.get(eq(GuavaCachedJwkProvider.NULL_KID_KEY))).thenReturn(jwk); assertThat(provider.get(GuavaCachedJwkProvider.NULL_KID_KEY), equalTo(jwk)); verify(fallback).get(eq(GuavaCachedJwkProvider.NULL_KID_KEY)); verifyNoMoreInteractions(fallback); assertThat(provider.get(GuavaCachedJwkProvider.NULL_KID_KEY), equalTo(jwk)); }
public Oauth2Client(TokensStore tokenStore, Oauth2Properties oauthProperties) throws Exception { this.tokenStore = tokenStore; this.oauthProperties = oauthProperties; RestTemplate rt = new RestTemplate(); rt.getInterceptors().add(createClientAuthInterceptor(oauthProperties)); this.oauthRestTemplate = rt; this.jwkProvider = new GuavaCachedJwkProvider( traceJwkLookupsOf(new UrlJwkProvider(new URL(oauthProperties.getJwksEndpoint())))); }
@Test public void shouldCreateCachedProviderWithCustomValues() { JwkProvider provider = new JwkProviderBuilder(domain) .rateLimited(false) .cached(10, 24, TimeUnit.HOURS) .build(); assertThat(provider, notNullValue()); assertThat(provider, instanceOf(GuavaCachedJwkProvider.class)); assertThat(((GuavaCachedJwkProvider) provider).getBaseProvider(), instanceOf(UrlJwkProvider.class)); }
@Test public void shouldUseFallbackWhenNotCached() throws Exception { when(fallback.get(eq(KID))).thenReturn(jwk); assertThat(provider.get(KID), equalTo(jwk)); verify(fallback).get(eq(KID)); }
@Before public void setUp() throws Exception { provider = new GuavaCachedJwkProvider(fallback); }
@Test public void shouldCreateCachedAndRateLimitedProviderWithCustomValues() { JwkProvider provider = new JwkProviderBuilder(domain) .cached(10, 24, TimeUnit.HOURS) .rateLimited(10, 24, TimeUnit.HOURS) .build(); assertThat(provider, notNullValue()); assertThat(provider, instanceOf(GuavaCachedJwkProvider.class)); JwkProvider baseProvider = ((GuavaCachedJwkProvider) provider).getBaseProvider(); assertThat(baseProvider, instanceOf(RateLimitedJwkProvider.class)); assertThat(((RateLimitedJwkProvider) baseProvider).getBaseProvider(), instanceOf(UrlJwkProvider.class)); }
@Test public void shouldCreateCachedAndRateLimitedProvider() { JwkProvider provider = new JwkProviderBuilder(domain) .cached(true) .rateLimited(true) .build(); assertThat(provider, notNullValue()); assertThat(provider, instanceOf(GuavaCachedJwkProvider.class)); JwkProvider baseProvider = ((GuavaCachedJwkProvider) provider).getBaseProvider(); assertThat(baseProvider, instanceOf(RateLimitedJwkProvider.class)); assertThat(((RateLimitedJwkProvider) baseProvider).getBaseProvider(), instanceOf(UrlJwkProvider.class)); }
@Test public void shouldFailToGetSingleWhenNotExists() throws Exception { expectedException.expect(SigningKeyNotFoundException.class); when(fallback.get(anyString())).thenThrow(new SigningKeyNotFoundException("TEST!", null)); provider.get(KID); }