From 67a70571de2c89e68b1a3720482170cc88bcaade Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Fri, 2 Oct 2015 14:13:03 +0100 Subject: [PATCH] Add simple SSO sample with github authentication --- spring-boot-samples/pom.xml | 1 + .../spring-boot-sample-secure-sso/pom.xml | 58 +++++++++++++++++++ .../sso/SampleOAuth2SsoApplication.java | 37 ++++++++++++ .../src/main/resources/application.yml | 14 +++++ .../src/main/resources/static/index.html | 39 +++++++++++++ .../sso/SampleOAuth2SsoApplicationTests.java | 54 +++++++++++++++++ 6 files changed, 203 insertions(+) create mode 100644 spring-boot-samples/spring-boot-sample-secure-sso/pom.xml create mode 100644 spring-boot-samples/spring-boot-sample-secure-sso/src/main/java/sample/secure/sso/SampleOAuth2SsoApplication.java create mode 100644 spring-boot-samples/spring-boot-sample-secure-sso/src/main/resources/application.yml create mode 100644 spring-boot-samples/spring-boot-sample-secure-sso/src/main/resources/static/index.html create mode 100644 spring-boot-samples/spring-boot-sample-secure-sso/src/test/java/sample/secure/sso/SampleOAuth2SsoApplicationTests.java diff --git a/spring-boot-samples/pom.xml b/spring-boot-samples/pom.xml index 5eb8551cda..95869eaf93 100644 --- a/spring-boot-samples/pom.xml +++ b/spring-boot-samples/pom.xml @@ -71,6 +71,7 @@ spring-boot-sample-property-validation spring-boot-sample-secure spring-boot-sample-secure-oauth2 + spring-boot-sample-secure-sso spring-boot-sample-servlet spring-boot-sample-session-redis spring-boot-sample-simple diff --git a/spring-boot-samples/spring-boot-sample-secure-sso/pom.xml b/spring-boot-samples/spring-boot-sample-secure-sso/pom.xml new file mode 100644 index 0000000000..4fa4166822 --- /dev/null +++ b/spring-boot-samples/spring-boot-sample-secure-sso/pom.xml @@ -0,0 +1,58 @@ + + + 4.0.0 + + + org.springframework.boot + spring-boot-samples + 1.3.0.BUILD-SNAPSHOT + + spring-boot-sample-secure-sso + spring-boot-sample-secure-sso + Spring Boot Security OAuth2 Sample + http://projects.spring.io/spring-boot/ + + Pivotal Software, Inc. + http://www.spring.io + + + ${basedir}/../.. + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-security + + + org.springframework.security.oauth + spring-security-oauth2 + + + org.springframework.boot + spring-boot-starter-test + test + + + org.webjars + bootstrap + 3.0.3 + + + org.webjars + jquery + 2.0.3-1 + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + diff --git a/spring-boot-samples/spring-boot-sample-secure-sso/src/main/java/sample/secure/sso/SampleOAuth2SsoApplication.java b/spring-boot-samples/spring-boot-sample-secure-sso/src/main/java/sample/secure/sso/SampleOAuth2SsoApplication.java new file mode 100644 index 0000000000..fd709ad75a --- /dev/null +++ b/spring-boot-samples/spring-boot-sample-secure-sso/src/main/java/sample/secure/sso/SampleOAuth2SsoApplication.java @@ -0,0 +1,37 @@ +/* + * Copyright 2012-2015 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 sample.secure.sso; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.security.oauth2.client.EnableOAuth2Sso; + +/** + * After you launch the app it should prompt you for login with github. As long as it runs + * on port 8080 on localhost it should work. Use an incognito window for testing + * (otherwise you might find you are already authenticated). + * + * @author Dave Syer + */ +@SpringBootApplication +@EnableOAuth2Sso +public class SampleOAuth2SsoApplication { + + public static void main(String[] args) { + SpringApplication.run(SampleOAuth2SsoApplication.class, args); + } + +} diff --git a/spring-boot-samples/spring-boot-sample-secure-sso/src/main/resources/application.yml b/spring-boot-samples/spring-boot-sample-secure-sso/src/main/resources/application.yml new file mode 100644 index 0000000000..5e37fe2e6e --- /dev/null +++ b/spring-boot-samples/spring-boot-sample-secure-sso/src/main/resources/application.yml @@ -0,0 +1,14 @@ +security: + oauth2: + client: + clientId: 314f917438a18b82966a + clientSecret: 0cc21fd8c59749bfff0e0d441378438e692ae896 + accessTokenUri: https://github.com/login/oauth/access_token + userAuthorizationUri: https://github.com/login/oauth/authorize + clientAuthenticationScheme: form + resource: + userInfoUri: https://api.github.com/user + +logging: + level: + org.springframework.security: DEBUG diff --git a/spring-boot-samples/spring-boot-sample-secure-sso/src/main/resources/static/index.html b/spring-boot-samples/spring-boot-sample-secure-sso/src/main/resources/static/index.html new file mode 100644 index 0000000000..03a317ed60 --- /dev/null +++ b/spring-boot-samples/spring-boot-sample-secure-sso/src/main/resources/static/index.html @@ -0,0 +1,39 @@ + + + +Static + + + + + + +
+

Home

+

Some static content

+

+ Go » +

+
+ + + diff --git a/spring-boot-samples/spring-boot-sample-secure-sso/src/test/java/sample/secure/sso/SampleOAuth2SsoApplicationTests.java b/spring-boot-samples/spring-boot-sample-secure-sso/src/test/java/sample/secure/sso/SampleOAuth2SsoApplicationTests.java new file mode 100644 index 0000000000..8f750987e4 --- /dev/null +++ b/spring-boot-samples/spring-boot-sample-secure-sso/src/test/java/sample/secure/sso/SampleOAuth2SsoApplicationTests.java @@ -0,0 +1,54 @@ +package sample.secure.sso; + +import static org.hamcrest.CoreMatchers.containsString; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.header; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static org.springframework.test.web.servlet.setup.MockMvcBuilders.webAppContextSetup; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.IntegrationTest; +import org.springframework.boot.test.SpringApplicationConfiguration; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.web.FilterChainProxy; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.web.context.WebApplicationContext; + +/** + * Series of automated integration tests to verify proper behavior of auto-configured, + * OAuth2-secured system + * + * @author Greg Turnquist + */ +@RunWith(SpringJUnit4ClassRunner.class) +@WebAppConfiguration +@SpringApplicationConfiguration(SampleOAuth2SsoApplication.class) +@IntegrationTest("server.port:0") +public class SampleOAuth2SsoApplicationTests { + + @Autowired + WebApplicationContext context; + + @Autowired + FilterChainProxy filterChain; + + private MockMvc mvc; + + @Before + public void setUp() { + this.mvc = webAppContextSetup(this.context).addFilters(this.filterChain).build(); + SecurityContextHolder.clearContext(); + } + + @Test + public void everythingIsSecuredByDefault() throws Exception { + this.mvc.perform(get("/")).andExpect(status().isFound()) + .andExpect(header().string("location", containsString("github.com"))); + } + +}