renamed spring-security-modules/spring-security-openid to spring-security-modules/spring-security-oidc

This commit is contained in:
Gerardo Roza
2019-12-26 12:06:02 -03:00
parent c1948fddd8
commit 04f9c4888e
22 changed files with 4 additions and 5 deletions
@@ -0,0 +1,20 @@
package com.baeldung.openid.oidc.discovery;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.ConfigurableApplicationContext;
import com.baeldung.openid.oidc.utils.YamlLoaderInitializer;
@SpringBootApplication
public class SpringOidcDiscoveryApplication {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(SpringOidcDiscoveryApplication.class);
ApplicationContextInitializer<ConfigurableApplicationContext> yamlInitializer = new YamlLoaderInitializer("discovery-application.yml");
application.addInitializers(yamlInitializer);
application.run(args);
}
}
@@ -0,0 +1,17 @@
package com.baeldung.openid.oidc.discovery.web.controllers;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.oauth2.core.oidc.user.OidcUser;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/user")
public class UserRestController {
@GetMapping("/oidc-principal")
public OidcUser getOidcUserPrincipal(@AuthenticationPrincipal OidcUser principal) {
return principal;
}
}
@@ -0,0 +1,20 @@
package com.baeldung.openid.oidc.login;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.ConfigurableApplicationContext;
import com.baeldung.openid.oidc.utils.YamlLoaderInitializer;
@SpringBootApplication
public class SpringOidcLoginApplication {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(SpringOidcLoginApplication.class);
ApplicationContextInitializer<ConfigurableApplicationContext> yamlInitializer = new YamlLoaderInitializer("login-application.yml");
application.addInitializers(yamlInitializer);
application.run(args);
}
}
@@ -0,0 +1,28 @@
package com.baeldung.openid.oidc.login.config;
import java.util.HashSet;
import java.util.Set;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.oauth2.client.oidc.userinfo.OidcUserService;
@Configuration
public class OAuth2LoginSecurityConfig extends WebSecurityConfigurerAdapter {// @formatter:off
@Override
protected void configure(HttpSecurity http) throws Exception {
Set<String> googleScopes = new HashSet<>();
googleScopes.add("https://www.googleapis.com/auth/userinfo.email");
googleScopes.add("https://www.googleapis.com/auth/userinfo.profile");
OidcUserService googleUserService = new OidcUserService();
googleUserService.setAccessibleScopes(googleScopes);
http.authorizeRequests(authorizeRequests -> authorizeRequests.anyRequest()
.authenticated())
.oauth2Login(oauthLogin -> oauthLogin.userInfoEndpoint()
.oidcUserService(googleUserService));
}// @formatter:on
}
@@ -0,0 +1,23 @@
package com.baeldung.openid.oidc.login.service;
import java.util.Collections;
import java.util.Map;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.oauth2.core.oidc.user.OidcUser;
import org.springframework.stereotype.Service;
@Service
public class UserService {
public Map<String, Object> getUserClaims() {
Authentication authentication = SecurityContextHolder.getContext()
.getAuthentication();
if (authentication.getPrincipal() instanceof OidcUser) {
OidcUser principal = ((OidcUser) authentication.getPrincipal());
return principal.getClaims();
}
return Collections.emptyMap();
}
}
@@ -0,0 +1,32 @@
package com.baeldung.openid.oidc.login.web.controllers;
import java.util.Map;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.oauth2.core.oidc.user.OidcUser;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.baeldung.openid.oidc.login.service.UserService;
@RestController
@RequestMapping("/user")
public class UserRestController {
private UserService service;
public UserRestController(UserService service) {
this.service = service;
}
@GetMapping("/oidc-principal")
public OidcUser getOidcUserPrincipal(@AuthenticationPrincipal OidcUser principal) {
return principal;
}
@GetMapping("/oidc-claims")
public Map<String, Object> getClaimsFromBean() {
return service.getUserClaims();
}
}
@@ -0,0 +1,20 @@
package com.baeldung.openid.oidc.sessionmanagement;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.ConfigurableApplicationContext;
import com.baeldung.openid.oidc.utils.YamlLoaderInitializer;
@SpringBootApplication
public class SpringOidcSessionManagementApplication {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(SpringOidcSessionManagementApplication.class);
ApplicationContextInitializer<ConfigurableApplicationContext> yamlInitializer = new YamlLoaderInitializer("sessionmanagement-application.yml");
application.addInitializers(yamlInitializer);
application.run(args);
}
}
@@ -0,0 +1,37 @@
package com.baeldung.openid.oidc.sessionmanagement.config;
import java.net.URI;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.oauth2.client.oidc.web.logout.OidcClientInitiatedLogoutSuccessHandler;
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
import org.springframework.security.web.authentication.logout.LogoutSuccessHandler;
@Configuration
public class OAuth2SessionManagementSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private ClientRegistrationRepository clientRegistrationRepository;
@Override
protected void configure(HttpSecurity http) throws Exception { // @formatter:off
http.authorizeRequests(authorizeRequests -> authorizeRequests.mvcMatchers("/home")
.permitAll()
.anyRequest()
.authenticated())
.oauth2Login(oauthLogin -> oauthLogin.permitAll())
.logout(logout -> logout.logoutSuccessHandler(oidcLogoutSuccessHandler()));
} // @formatter:on
private LogoutSuccessHandler oidcLogoutSuccessHandler() {
OidcClientInitiatedLogoutSuccessHandler oidcLogoutSuccessHandler = new OidcClientInitiatedLogoutSuccessHandler(this.clientRegistrationRepository);
oidcLogoutSuccessHandler.setPostLogoutRedirectUri(URI.create("http://localhost:8081/home"));
return oidcLogoutSuccessHandler;
}
}
@@ -0,0 +1,14 @@
package com.baeldung.openid.oidc.sessionmanagement.web.controllers;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HomeRestController {
@GetMapping("/home")
public String simpleHomepage() {
return "Welcome to this simple homepage!";
}
}
@@ -0,0 +1,17 @@
package com.baeldung.openid.oidc.sessionmanagement.web.controllers;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.oauth2.core.oidc.user.OidcUser;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/user")
public class UserRestController {
@GetMapping("/oidc-principal")
public OidcUser getOidcUserPrincipal(@AuthenticationPrincipal OidcUser principal) {
return principal;
}
}
@@ -0,0 +1,48 @@
package com.baeldung.openid.oidc.utils;
import java.io.IOException;
import org.springframework.boot.env.YamlPropertySourceLoader;
import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.PropertySource;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
public class YamlLoaderInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
private final YamlPropertySourceLoader loader = new YamlPropertySourceLoader();
private final String file;
public YamlLoaderInitializer() {
this.file = null;
}
public YamlLoaderInitializer(String file) {
this.file = file;
}
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
String yamlFile = (this.file == null) ? applicationContext.getEnvironment()
.getProperty("custom.configyaml.file") : this.file;
Resource path = new ClassPathResource(yamlFile);
PropertySource<?> propertySource = loadYaml(path);
applicationContext.getEnvironment()
.getPropertySources()
.addLast(propertySource);
}
private PropertySource<?> loadYaml(Resource path) {
if (!path.exists()) {
throw new IllegalArgumentException("Resource " + path + " does not exist");
}
try {
return this.loader.load("custom-resource", path)
.get(0);
} catch (IOException ex) {
throw new IllegalStateException("Failed to load yaml configuration from" + path, ex);
}
}
}
@@ -0,0 +1,7 @@
server:
port: 8081
logging:
level:
org.springframework.web.client.RestTemplate: DEBUG
@@ -0,0 +1,11 @@
spring:
security:
oauth2:
client:
registration:
custom-google:
client-id: <client-id>
client-secret: <client-secret>
provider:
custom-google:
issuer-uri: https://accounts.google.com
@@ -0,0 +1,8 @@
spring:
security:
oauth2:
client:
registration:
google:
client-id: <client-id>
client-secret: <client-secret>
@@ -0,0 +1,16 @@
spring:
security:
oauth2:
client:
registration:
okta:
client-id: <client-id>
client-secret: <client-secret>
provider:
okta:
issuer-uri: https://dev-123.okta.com
# Or, optionally:
#authorization-uri https://dev-123-admin.okta.com/oauth2/v1/authorize
#token-uri: https://dev-123-admin.okta.com/oauth2/v1/token
#user-info-uri: https://dev-123-admin.okta.com/oauth2/v1/userinfo
#jwk-set-uri: https://dev-123-admin.okta.com/oauth2/v1/keys
@@ -0,0 +1,19 @@
package com.baeldung.openid.oidc.discovery;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ContextConfiguration;
import com.baeldung.openid.oidc.utils.YamlLoaderInitializer;
//We'll ignore this test, as we don't want to depend on Google's OIDC-configuration endpoint to be available
@Disabled
@SpringBootTest(classes = SpringOidcDiscoveryApplication.class, properties = "custom.configyaml.file=discovery-application.yml")
@ContextConfiguration(initializers = YamlLoaderInitializer.class)
public class SpringContextTest {
@Test
public void whenSpringContextIsBootstrapped_thenNoExceptions() {
}
}
@@ -0,0 +1,16 @@
package com.baeldung.openid.oidc.login;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ContextConfiguration;
import com.baeldung.openid.oidc.utils.YamlLoaderInitializer;
@SpringBootTest(classes = SpringOidcLoginApplication.class, properties = "custom.configyaml.file=login-application.yml")
@ContextConfiguration(initializers = YamlLoaderInitializer.class)
public class SpringContextTest {
@Test
public void whenSpringContextIsBootstrapped_thenNoExceptions() {
}
}
@@ -0,0 +1,19 @@
package com.baeldung.openid.oidc.sessionmanagement;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ContextConfiguration;
import com.baeldung.openid.oidc.utils.YamlLoaderInitializer;
//We'll ignore this test, as we don't want to depend on the Okta instance OIDC-configuration endpoint to be available
@Disabled
@SpringBootTest(classes = SpringOidcSessionManagementApplication.class, properties = "custom.configyaml.file=sessionmanagement-application.yml")
@ContextConfiguration(initializers = YamlLoaderInitializer.class)
public class SpringContextTest {
@Test
public void whenSpringContextIsBootstrapped_thenNoExceptions() {
}
}