diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/oauth2/client/CommonOAuth2Provider.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/oauth2/client/CommonOAuth2Provider.java deleted file mode 100644 index bc4d930a0ae..00000000000 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/oauth2/client/CommonOAuth2Provider.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright 2012-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.boot.autoconfigure.security.oauth2.client; - -import org.springframework.security.oauth2.client.registration.ClientRegistration; -import org.springframework.security.oauth2.client.registration.ClientRegistration.Builder; -import org.springframework.security.oauth2.core.AuthorizationGrantType; -import org.springframework.security.oauth2.core.ClientAuthenticationMethod; - -/** - * Common OAuth2 Providers that can be used to create - * {@link org.springframework.security.oauth2.client.registration.ClientRegistration.Builder - * builders} pre-configured with sensible defaults. - * - * @author Phillip Webb - * @since 2.0.0 - */ -public enum CommonOAuth2Provider { - - GOOGLE { - - @Override - public Builder getBuilder(String registrationId) { - ClientRegistration.Builder builder = getBuilder(registrationId, - ClientAuthenticationMethod.BASIC, DEFAULT_REDIRECT_URL); - builder.scope("openid", "profile", "email", "address", "phone"); - builder.authorizationUri("https://accounts.google.com/o/oauth2/v2/auth"); - builder.tokenUri("https://www.googleapis.com/oauth2/v4/token"); - builder.jwkSetUri("https://www.googleapis.com/oauth2/v3/certs"); - builder.userInfoUri("https://www.googleapis.com/oauth2/v3/userinfo"); - builder.clientName("Google"); - return builder; - } - - }, - - GITHUB { - - @Override - public Builder getBuilder(String registrationId) { - ClientRegistration.Builder builder = getBuilder(registrationId, - ClientAuthenticationMethod.BASIC, DEFAULT_REDIRECT_URL); - builder.scope("user"); - builder.authorizationUri("https://github.com/login/oauth/authorize"); - builder.tokenUri("https://github.com/login/oauth/access_token"); - builder.userInfoUri("https://api.github.com/user"); - builder.userNameAttributeName("name"); - builder.clientName("GitHub"); - return builder; - } - - }, - - FACEBOOK { - - @Override - public Builder getBuilder(String registrationId) { - ClientRegistration.Builder builder = getBuilder(registrationId, - ClientAuthenticationMethod.POST, DEFAULT_REDIRECT_URL); - builder.scope("public_profile", "email"); - builder.authorizationUri("https://www.facebook.com/v2.8/dialog/oauth"); - builder.tokenUri("https://graph.facebook.com/v2.8/oauth/access_token"); - builder.userInfoUri("https://graph.facebook.com/me"); - builder.userNameAttributeName("name"); - builder.clientName("Facebook"); - return builder; - } - - }, - - OKTA { - - @Override - public Builder getBuilder(String registrationId) { - ClientRegistration.Builder builder = getBuilder(registrationId, - ClientAuthenticationMethod.BASIC, DEFAULT_REDIRECT_URL); - builder.scope("openid", "profile", "email", "address", "phone"); - builder.clientName("Okta"); - return builder; - } - - }; - - private static final String DEFAULT_REDIRECT_URL = "{scheme}://{serverName}:{serverPort}{contextPath}/oauth2/authorize/code/{registrationId}"; - - protected final ClientRegistration.Builder getBuilder(String registrationId, - ClientAuthenticationMethod method, String redirectUri) { - ClientRegistration.Builder builder = new ClientRegistration.Builder( - registrationId); - builder.clientAuthenticationMethod(method); - builder.authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE); - builder.redirectUri(redirectUri); - return builder; - } - - /** - * Create a new - * {@link org.springframework.security.oauth2.client.registration.ClientRegistration.Builder - * ClientRegistration.Builder} pre-initialized with the provider settings. - * @param registrationId the registration-id used with the new builder - * @return a builder instance - */ - public abstract ClientRegistration.Builder getBuilder(String registrationId); - -} diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/oauth2/client/OAuth2ClientPropertiesRegistrationAdapter.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/oauth2/client/OAuth2ClientPropertiesRegistrationAdapter.java index a99ec5c046a..9a062f8f006 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/oauth2/client/OAuth2ClientPropertiesRegistrationAdapter.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/oauth2/client/OAuth2ClientPropertiesRegistrationAdapter.java @@ -26,6 +26,7 @@ import org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2Clien import org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientProperties.Registration; import org.springframework.boot.context.properties.bind.convert.BinderConversionService; import org.springframework.core.convert.ConversionException; +import org.springframework.security.config.oauth2.client.CommonOAuth2Provider; import org.springframework.security.oauth2.client.registration.ClientRegistration; import org.springframework.security.oauth2.client.registration.ClientRegistration.Builder; import org.springframework.security.oauth2.core.AuthorizationGrantType; diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/security/oauth2/client/CommonOAuth2ProviderTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/security/oauth2/client/CommonOAuth2ProviderTests.java deleted file mode 100644 index 02b5073f648..00000000000 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/security/oauth2/client/CommonOAuth2ProviderTests.java +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Copyright 2012-2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.boot.autoconfigure.security.oauth2.client; - -import org.junit.Test; - -import org.springframework.security.oauth2.client.registration.ClientRegistration; -import org.springframework.security.oauth2.client.registration.ClientRegistration.Builder; -import org.springframework.security.oauth2.client.registration.ClientRegistration.ProviderDetails; -import org.springframework.security.oauth2.core.AuthorizationGrantType; -import org.springframework.security.oauth2.core.ClientAuthenticationMethod; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * Tests for {@link CommonOAuth2Provider}. - * - * @author Phillip Webb - */ -public class CommonOAuth2ProviderTests { - - private static final String DEFAULT_REDIRECT_URL = "{scheme}://{serverName}:{serverPort}{contextPath}/oauth2/authorize/code/{registrationId}"; - - @Test - public void getBuilderWhenGoogleShouldHaveGoogleSettings() throws Exception { - ClientRegistration registration = build(CommonOAuth2Provider.GOOGLE); - ProviderDetails providerDetails = registration.getProviderDetails(); - assertThat(providerDetails.getAuthorizationUri()) - .isEqualTo("https://accounts.google.com/o/oauth2/v2/auth"); - assertThat(providerDetails.getTokenUri()) - .isEqualTo("https://www.googleapis.com/oauth2/v4/token"); - assertThat(providerDetails.getUserInfoEndpoint().getUri()) - .isEqualTo("https://www.googleapis.com/oauth2/v3/userinfo"); - assertThat(providerDetails.getUserInfoEndpoint().getUserNameAttributeName()) - .isEqualTo(null); - assertThat(providerDetails.getJwkSetUri()) - .isEqualTo("https://www.googleapis.com/oauth2/v3/certs"); - assertThat(registration.getClientAuthenticationMethod()) - .isEqualTo(ClientAuthenticationMethod.BASIC); - assertThat(registration.getAuthorizationGrantType()) - .isEqualTo(AuthorizationGrantType.AUTHORIZATION_CODE); - assertThat(registration.getRedirectUri()).isEqualTo(DEFAULT_REDIRECT_URL); - assertThat(registration.getScope()).containsOnly("openid", "profile", "email", - "address", "phone"); - assertThat(registration.getClientName()).isEqualTo("Google"); - assertThat(registration.getRegistrationId()).isEqualTo("123"); - } - - @Test - public void getBuilderWhenGitHubShouldHaveGitHubSettings() throws Exception { - ClientRegistration registration = build(CommonOAuth2Provider.GITHUB); - ProviderDetails providerDetails = registration.getProviderDetails(); - assertThat(providerDetails.getAuthorizationUri()) - .isEqualTo("https://github.com/login/oauth/authorize"); - assertThat(providerDetails.getTokenUri()) - .isEqualTo("https://github.com/login/oauth/access_token"); - assertThat(providerDetails.getUserInfoEndpoint().getUri()) - .isEqualTo("https://api.github.com/user"); - assertThat(providerDetails.getUserInfoEndpoint().getUserNameAttributeName()) - .isEqualTo("name"); - assertThat(providerDetails.getJwkSetUri()).isNull(); - assertThat(registration.getClientAuthenticationMethod()) - .isEqualTo(ClientAuthenticationMethod.BASIC); - assertThat(registration.getAuthorizationGrantType()) - .isEqualTo(AuthorizationGrantType.AUTHORIZATION_CODE); - assertThat(registration.getRedirectUri()).isEqualTo(DEFAULT_REDIRECT_URL); - assertThat(registration.getScope()).containsOnly("user"); - assertThat(registration.getClientName()).isEqualTo("GitHub"); - assertThat(registration.getRegistrationId()).isEqualTo("123"); - } - - @Test - public void getBuilderWhenFacebookShouldHaveFacebookSettings() throws Exception { - ClientRegistration registration = build(CommonOAuth2Provider.FACEBOOK); - ProviderDetails providerDetails = registration.getProviderDetails(); - assertThat(providerDetails.getAuthorizationUri()) - .isEqualTo("https://www.facebook.com/v2.8/dialog/oauth"); - assertThat(providerDetails.getTokenUri()) - .isEqualTo("https://graph.facebook.com/v2.8/oauth/access_token"); - assertThat(providerDetails.getUserInfoEndpoint().getUri()) - .isEqualTo("https://graph.facebook.com/me"); - assertThat(providerDetails.getUserInfoEndpoint().getUserNameAttributeName()) - .isEqualTo("name"); - assertThat(providerDetails.getJwkSetUri()).isNull(); - assertThat(registration.getClientAuthenticationMethod()) - .isEqualTo(ClientAuthenticationMethod.POST); - assertThat(registration.getAuthorizationGrantType()) - .isEqualTo(AuthorizationGrantType.AUTHORIZATION_CODE); - assertThat(registration.getRedirectUri()).isEqualTo(DEFAULT_REDIRECT_URL); - assertThat(registration.getScope()).containsOnly("public_profile", "email"); - assertThat(registration.getClientName()).isEqualTo("Facebook"); - assertThat(registration.getRegistrationId()).isEqualTo("123"); - } - - @Test - public void getBuilderWhenOktaShouldHaveOktaSettings() throws Exception { - ClientRegistration registration = builder(CommonOAuth2Provider.OKTA) - .authorizationUri("http://example.com/auth") - .tokenUri("http://example.com/token") - .userInfoUri("http://example.com/info").build(); - ProviderDetails providerDetails = registration.getProviderDetails(); - assertThat(providerDetails.getAuthorizationUri()) - .isEqualTo("http://example.com/auth"); - assertThat(providerDetails.getTokenUri()).isEqualTo("http://example.com/token"); - assertThat(providerDetails.getUserInfoEndpoint().getUri()) - .isEqualTo("http://example.com/info"); - assertThat(providerDetails.getUserInfoEndpoint().getUserNameAttributeName()) - .isEqualTo(null); - assertThat(providerDetails.getJwkSetUri()).isNull(); - assertThat(registration.getClientAuthenticationMethod()) - .isEqualTo(ClientAuthenticationMethod.BASIC); - assertThat(registration.getAuthorizationGrantType()) - .isEqualTo(AuthorizationGrantType.AUTHORIZATION_CODE); - assertThat(registration.getRedirectUri()).isEqualTo(DEFAULT_REDIRECT_URL); - assertThat(registration.getScope()).containsOnly("openid", "profile", "email", - "address", "phone"); - assertThat(registration.getClientName()).isEqualTo("Okta"); - assertThat(registration.getRegistrationId()).isEqualTo("123"); - } - - private ClientRegistration build(CommonOAuth2Provider provider) { - return builder(provider).build(); - } - - private Builder builder(CommonOAuth2Provider provider) { - return provider.getBuilder("123").clientId("abcd").clientSecret("secret"); - } - -}