public JwksRSAKeyProvider(URL jwksUri) { this.jwkProvider = new JwkProviderBuilder(jwksUri).build(); }
/** * Creates a new Builder with a domain where to look for the jwks. * <br><br> It can be a url link 'https://samples.auth0.com' or just a domain 'samples.auth0.com'. * If the protocol (http or https) is not provided then https is used by default. * The default jwks path "/.well-known/jwks.json" is appended to the given string domain. * <br><br> For example, when the domain is "samples.auth0.com" * the jwks url that will be used is "https://samples.auth0.com/.well-known/jwks.json" * <br><br> Use {@link #JwkProviderBuilder(URL)} if you need to pass a full URL. * @param domain where jwks is published * @throws IllegalStateException if domain is null * @see UrlJwkProvider#UrlJwkProvider(String) */ public JwkProviderBuilder(String domain) { this(buildJwkUrl(domain)); }
@Test public void shouldSupportUrlToJwksDomainWithSubPath() throws Exception { String urlToJwksWithSubPath = normalizedDomain + "/sub/path" + WELL_KNOWN_JWKS_PATH; URL url = new URL(urlToJwksWithSubPath); JwkProvider provider = new JwkProviderBuilder(url) .rateLimited(false) .cached(false) .build(); assertThat(provider, notNullValue()); assertThat(provider, instanceOf(UrlJwkProvider.class)); UrlJwkProvider urlJwkProvider = (UrlJwkProvider) provider; assertThat(urlJwkProvider.url.toString(), equalTo(urlToJwksWithSubPath)); } }
@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 shouldCreateRateLimitedProviderWithCustomValues() { JwkProvider provider = new JwkProviderBuilder(domain) .cached(false) .rateLimited(10, 24, TimeUnit.HOURS) .build(); assertThat(provider, notNullValue()); assertThat(provider, instanceOf(RateLimitedJwkProvider.class)); assertThat(((RateLimitedJwkProvider) provider).getBaseProvider(), instanceOf(UrlJwkProvider.class)); }
@Test public void shouldCreateForUrl() throws Exception { URL urlToJwks = new URL(normalizedDomain + WELL_KNOWN_JWKS_PATH); assertThat(new JwkProviderBuilder(urlToJwks).build(), notNullValue()); }
@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 shouldCreateForNormalizedDomain() { assertThat(new JwkProviderBuilder(normalizedDomain).build(), notNullValue()); }
@Test public void shouldCreateRateLimitedProvider() { JwkProvider provider = new JwkProviderBuilder(domain) .cached(false) .rateLimited(true) .build(); assertThat(provider, notNullValue()); assertThat(provider, instanceOf(RateLimitedJwkProvider.class)); assertThat(((RateLimitedJwkProvider) provider).getBaseProvider(), instanceOf(UrlJwkProvider.class)); }
@Test public void shouldCreateForDomain() { assertThat(new JwkProviderBuilder(domain).build(), notNullValue()); }
@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 shouldFailWhenNoUrlIsProvided() { expectedException.expect(IllegalStateException.class); expectedException.expectMessage("Cannot build provider without url to jwks"); new JwkProviderBuilder((URL) null).build(); }
@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 shouldFailWhenNoDomainIsProvided() { expectedException.expect(IllegalStateException.class); expectedException.expectMessage("Cannot build provider without domain"); new JwkProviderBuilder((String) null).build(); }
@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)); }