瀏覽代碼

Map CustomUserTypesOAuth2UserService using clientRegistrationId

Fixes gh-4692
Joe Grandja 7 年之前
父節點
當前提交
83dc902ff7

+ 3 - 3
config/src/main/java/org/springframework/security/config/annotation/web/configurers/oauth2/client/OAuth2LoginConfigurer.java

@@ -206,10 +206,10 @@ public final class OAuth2LoginConfigurer<B extends HttpSecurityBuilder<B>> exten
 			return this;
 		}
 
-		public UserInfoEndpointConfig customUserType(Class<? extends OAuth2User> customUserType, String userInfoUri) {
+		public UserInfoEndpointConfig customUserType(Class<? extends OAuth2User> customUserType, String clientRegistrationId) {
 			Assert.notNull(customUserType, "customUserType cannot be null");
-			Assert.hasText(userInfoUri, "userInfoUri cannot be empty");
-			this.customUserTypes.put(userInfoUri, customUserType);
+			Assert.hasText(clientRegistrationId, "clientRegistrationId cannot be empty");
+			this.customUserTypes.put(clientRegistrationId, customUserType);
 			return this;
 		}
 

+ 5 - 3
oauth2/oauth2-client/src/main/java/org/springframework/security/oauth2/client/userinfo/CustomUserTypesOAuth2UserService.java

@@ -15,6 +15,7 @@
  */
 package org.springframework.security.oauth2.client.userinfo;
 
+import org.springframework.security.oauth2.client.registration.ClientRegistration;
 import org.springframework.security.oauth2.core.OAuth2AuthenticationException;
 import org.springframework.security.oauth2.core.user.OAuth2User;
 import org.springframework.util.Assert;
@@ -28,7 +29,7 @@ import java.util.Map;
  * <p>
  * The custom user type(s) is supplied via the constructor,
  * using a <code>Map</code> of {@link OAuth2User} type <i>keyed</i> by <code>String</code>,
- * representing the <i>UserInfo Endpoint</i> address.
+ * which represents the {@link ClientRegistration#getRegistrationId() Registration Id} of the Client.
  * <p>
  * This implementation uses a {@link UserInfoRetriever} to obtain the user attributes
  * of the <i>End-User</i> (Resource Owner) from the <i>UserInfo Endpoint</i>.
@@ -39,6 +40,7 @@ import java.util.Map;
  * @see OAuth2UserRequest
  * @see OAuth2User
  * @see UserInfoRetriever
+ * @see ClientRegistration
  */
 public class CustomUserTypesOAuth2UserService implements OAuth2UserService<OAuth2UserRequest, OAuth2User> {
 	private final Map<String, Class<? extends OAuth2User>> customUserTypes;
@@ -51,9 +53,9 @@ public class CustomUserTypesOAuth2UserService implements OAuth2UserService<OAuth
 
 	@Override
 	public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException {
-		String userInfoUri = userRequest.getClientRegistration().getProviderDetails().getUserInfoEndpoint().getUri();
+		String registrationId = userRequest.getClientRegistration().getRegistrationId();
 		Class<? extends OAuth2User> customUserType;
-		if ((customUserType = this.customUserTypes.get(userInfoUri)) == null) {
+		if ((customUserType = this.customUserTypes.get(registrationId)) == null) {
 			return null;
 		}