OAuth2 ClientRegistrations NPE fix when userinfo missing

Fixes gh-8187
This commit is contained in:
Martin Nemec 2020-03-26 18:30:28 +01:00 committed by Joe Grandja
parent 6d61b87213
commit 75c05d0bb4
2 changed files with 14 additions and 3 deletions

View File

@ -146,9 +146,12 @@ public final class ClientRegistrations {
RequestEntity<Void> request = RequestEntity.get(uri).build(); RequestEntity<Void> request = RequestEntity.get(uri).build();
Map<String, Object> configuration = rest.exchange(request, typeReference).getBody(); Map<String, Object> configuration = rest.exchange(request, typeReference).getBody();
OIDCProviderMetadata metadata = parse(configuration, OIDCProviderMetadata::parse); OIDCProviderMetadata metadata = parse(configuration, OIDCProviderMetadata::parse);
return withProviderConfiguration(metadata, issuer.toASCIIString()) ClientRegistration.Builder builder = withProviderConfiguration(metadata, issuer.toASCIIString())
.jwkSetUri(metadata.getJWKSetURI().toASCIIString()) .jwkSetUri(metadata.getJWKSetURI().toASCIIString());
.userInfoUri(metadata.getUserInfoEndpointURI().toASCIIString()); if (metadata.getUserInfoEndpointURI() != null) {
builder.userInfoUri(metadata.getUserInfoEndpointURI().toASCIIString());
}
return builder;
}; };
} }

View File

@ -195,6 +195,14 @@ public class ClientRegistrationsTest {
assertThat(provider.getJwkSetUri()).isNull(); assertThat(provider.getJwkSetUri()).isNull();
} }
// gh-8187
@Test
public void issuerWhenResponseMissingUserInfoUriThenSuccess() throws Exception {
this.response.remove("userinfo_endpoint");
ClientRegistration registration = registration("").build();
assertThat(registration.getProviderDetails().getUserInfoEndpoint().getUri()).isNull();
}
@Test @Test
public void issuerWhenContainsTrailingSlashThenSuccess() throws Exception { public void issuerWhenContainsTrailingSlashThenSuccess() throws Exception {
assertThat(registration("")).isNotNull(); assertThat(registration("")).isNotNull();