Commit f3055f26 authored by Thiago Hirata's avatar Thiago Hirata Committed by Madhura Bhave

UserNameAttribute for custom OAuth2 provider

The UserNameAttribute field for a custom OAuth2 provider was
ignored when building the ClientRegistration.

Closes gh-10672
parent 4b73c574
...@@ -37,6 +37,7 @@ import org.springframework.security.oauth2.core.ClientAuthenticationMethod; ...@@ -37,6 +37,7 @@ import org.springframework.security.oauth2.core.ClientAuthenticationMethod;
* {@link ClientRegistration}. * {@link ClientRegistration}.
* *
* @author Phillip Webb * @author Phillip Webb
* @author Thiago Hirata
* @since 2.0.0 * @since 2.0.0
*/ */
final class OAuth2ClientPropertiesRegistrationAdapter { final class OAuth2ClientPropertiesRegistrationAdapter {
...@@ -98,6 +99,7 @@ final class OAuth2ClientPropertiesRegistrationAdapter { ...@@ -98,6 +99,7 @@ final class OAuth2ClientPropertiesRegistrationAdapter {
copyIfNotNull(provider::getTokenUri, builder::tokenUri); copyIfNotNull(provider::getTokenUri, builder::tokenUri);
copyIfNotNull(provider::getUserInfoUri, builder::userInfoUri); copyIfNotNull(provider::getUserInfoUri, builder::userInfoUri);
copyIfNotNull(provider::getJwkSetUri, builder::jwkSetUri); copyIfNotNull(provider::getJwkSetUri, builder::jwkSetUri);
copyIfNotNull(provider::getUserNameAttribute, builder::userNameAttributeName);
return builder; return builder;
} }
......
...@@ -27,6 +27,7 @@ import org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2Clien ...@@ -27,6 +27,7 @@ import org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2Clien
import org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientProperties.Registration; import org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientProperties.Registration;
import org.springframework.security.oauth2.client.registration.ClientRegistration; import org.springframework.security.oauth2.client.registration.ClientRegistration;
import org.springframework.security.oauth2.client.registration.ClientRegistration.ProviderDetails; import org.springframework.security.oauth2.client.registration.ClientRegistration.ProviderDetails;
import org.springframework.security.oauth2.core.oidc.IdTokenClaimNames;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
...@@ -35,6 +36,7 @@ import static org.assertj.core.api.Assertions.assertThat; ...@@ -35,6 +36,7 @@ import static org.assertj.core.api.Assertions.assertThat;
* *
* @author Phillip Webb * @author Phillip Webb
* @author Madhura Bhave * @author Madhura Bhave
* @author Thiago Hirata
*/ */
public class OAuth2ClientPropertiesRegistrationAdapterTests { public class OAuth2ClientPropertiesRegistrationAdapterTests {
...@@ -48,6 +50,7 @@ public class OAuth2ClientPropertiesRegistrationAdapterTests { ...@@ -48,6 +50,7 @@ public class OAuth2ClientPropertiesRegistrationAdapterTests {
provider.setAuthorizationUri("http://example.com/auth"); provider.setAuthorizationUri("http://example.com/auth");
provider.setTokenUri("http://example.com/token"); provider.setTokenUri("http://example.com/token");
provider.setUserInfoUri("http://example.com/info"); provider.setUserInfoUri("http://example.com/info");
provider.setUserNameAttribute("sub");
provider.setJwkSetUri("http://example.com/jwk"); provider.setJwkSetUri("http://example.com/jwk");
Registration registration = new Registration(); Registration registration = new Registration();
registration.setProvider("provider"); registration.setProvider("provider");
...@@ -69,6 +72,8 @@ public class OAuth2ClientPropertiesRegistrationAdapterTests { ...@@ -69,6 +72,8 @@ public class OAuth2ClientPropertiesRegistrationAdapterTests {
assertThat(adaptedProvider.getTokenUri()).isEqualTo("http://example.com/token"); assertThat(adaptedProvider.getTokenUri()).isEqualTo("http://example.com/token");
assertThat(adaptedProvider.getUserInfoEndpoint().getUri()) assertThat(adaptedProvider.getUserInfoEndpoint().getUri())
.isEqualTo("http://example.com/info"); .isEqualTo("http://example.com/info");
assertThat(adaptedProvider.getUserInfoEndpoint().getUserNameAttributeName())
.isEqualTo("sub");
assertThat(adaptedProvider.getJwkSetUri()).isEqualTo("http://example.com/jwk"); assertThat(adaptedProvider.getJwkSetUri()).isEqualTo("http://example.com/jwk");
assertThat(adapted.getRegistrationId()).isEqualTo("registration"); assertThat(adapted.getRegistrationId()).isEqualTo("registration");
assertThat(adapted.getClientId()).isEqualTo("clientId"); assertThat(adapted.getClientId()).isEqualTo("clientId");
...@@ -101,6 +106,8 @@ public class OAuth2ClientPropertiesRegistrationAdapterTests { ...@@ -101,6 +106,8 @@ public class OAuth2ClientPropertiesRegistrationAdapterTests {
.isEqualTo("https://www.googleapis.com/oauth2/v4/token"); .isEqualTo("https://www.googleapis.com/oauth2/v4/token");
assertThat(adaptedProvider.getUserInfoEndpoint().getUri()) assertThat(adaptedProvider.getUserInfoEndpoint().getUri())
.isEqualTo("https://www.googleapis.com/oauth2/v3/userinfo"); .isEqualTo("https://www.googleapis.com/oauth2/v3/userinfo");
assertThat(adaptedProvider.getUserInfoEndpoint().getUserNameAttributeName())
.isEqualTo(IdTokenClaimNames.SUB);
assertThat(adaptedProvider.getJwkSetUri()) assertThat(adaptedProvider.getJwkSetUri())
.isEqualTo("https://www.googleapis.com/oauth2/v3/certs"); .isEqualTo("https://www.googleapis.com/oauth2/v3/certs");
assertThat(adapted.getRegistrationId()).isEqualTo("registration"); assertThat(adapted.getRegistrationId()).isEqualTo("registration");
...@@ -140,6 +147,8 @@ public class OAuth2ClientPropertiesRegistrationAdapterTests { ...@@ -140,6 +147,8 @@ public class OAuth2ClientPropertiesRegistrationAdapterTests {
.isEqualTo("https://www.googleapis.com/oauth2/v4/token"); .isEqualTo("https://www.googleapis.com/oauth2/v4/token");
assertThat(adaptedProvider.getUserInfoEndpoint().getUri()) assertThat(adaptedProvider.getUserInfoEndpoint().getUri())
.isEqualTo("https://www.googleapis.com/oauth2/v3/userinfo"); .isEqualTo("https://www.googleapis.com/oauth2/v3/userinfo");
assertThat(adaptedProvider.getUserInfoEndpoint().getUserNameAttributeName())
.isEqualTo(IdTokenClaimNames.SUB);
assertThat(adaptedProvider.getJwkSetUri()) assertThat(adaptedProvider.getJwkSetUri())
.isEqualTo("https://www.googleapis.com/oauth2/v3/certs"); .isEqualTo("https://www.googleapis.com/oauth2/v3/certs");
assertThat(adapted.getRegistrationId()).isEqualTo("registration"); assertThat(adapted.getRegistrationId()).isEqualTo("registration");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment