Je souhaite réaliser l'authentification unique (SSO) par OAuth 2.0 dans l'environnement Spring Boot 1.5.15. Je souhaite utiliser GitHub OAuth comme serveur d'autorisation.
Spring Boot 1.5.15 + JDK 1.8 + Maven
Spring Security Web https://spring.io/projects/spring-security Fournit une chaîne de filtrage de sécurité entre le client et l'application Web. Chaque filtre peut filtrer le refus d'accès des utilisateurs non authentifiés. Security Filter Chain est géré par Filter Chain Proxy.
Les paramètres de sécurité Spring héritent de la classe de paramètres par défaut appelée WebSecurityConfigurerAdapter et remplacent les paramètres nécessaires.
Référence officielle https://docs.spring.io/spring-security/site/docs/4.2.5.RELEASE/apidocs/org/springframework/security/config/annotation/web/configuration/WebSecurityConfigurerAdapter.html
SecurityConfig.java
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@Configuration //Charger automatiquement la classe de configuration
@EnableWebSecurity //Activer Spring Security
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(WebSecurity web) throws Exception {
//Décrire les paramètres du proxy de la chaîne de filtrage (≒ paramètres généraux) dans la chaîne de méthodes de sécurité Web
...
}
@Override
protected void configure(HttpSecurity http) throws Exception {
//Décrire les paramètres de la chaîne de filtres (≒ paramètres détaillés) dans la chaîne de méthodes HttpSecurity
...
}
}
Pour utiliser les informations utilisateur avec Thymeleaf, utilisez thymeleaf-extras-springsecurity. https://github.com/thymeleaf/thymeleaf-extras-springsecurity
OAuth2.0 https://tools.ietf.org/html/rfc6749 https://openid-foundation-japan.github.io/rfc6749.ja.html
Un cadre pour l'autorisation (AuthZ). Il existe quatre caractères dans OAuth 2.0: ** utilisateur **, ** serveur d'autorisation **, ** serveur de ressources ** et ** client **. ** L'utilisateur ** autorise le ** client ** à utiliser les ressources sur le ** serveur de ressources ** via le ** serveur d'autorisation **.
Les articles suivants sont résumés de manière très simple à comprendre. https://qiita.com/busyoumono99/items/1092fdc64d5a64d021d5
Dans OAuth2.0, l'authentification (Authentification, AuthN) peut être réalisée en acquérant des informations utilisateur à partir du serveur de ressources et en les rassemblant. Pour SSO avec GitHub OAuth
Il devient.
Pour l'utiliser avec Spring Security, utilisez Spring Security OAuth.
Décrivez les paramètres de ressource dans security.oauth2.resource. *
Of application.propertieset les paramètres client dans
security.oauth2.client. *`.
https://spring.io/projects/spring-security-oauth
L'URI de la ressource est / demo
.
pom.xml#dependencies
<dependencies>
<!-- Web application -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- OAuth2.0 SSO -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security.oauth</groupId>
<artifactId>spring-security-oauth2</artifactId>
</dependency>
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-springsecurity4</artifactId>
</dependency>
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
DemoApplication.java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
DemoController.java
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class DemoController {
@GetMapping("/")
public String home() {
return "home";
}
}
home.html
<html xmlns:th="http://www.thymeleaf.org"
xmlns:sec="http://www.thymeleaf.org/extras/spring-security">
<head>
<meta charset="utf-8"/>
<title>Home</title>
</head>
<body>
<h1>Hello, <span sec:authentication="name"></span></h1>
</body>
</html>
SecurityConfig.java
import org.springframework.boot.autoconfigure.security.oauth2.client.EnableOAuth2Sso;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@Configuration
@EnableWebSecurity
@EnableOAuth2Sso
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated(); //Connexion requise pour accéder à tous les URI
}
}
application.properties
#Notez que jusqu'à la pause est considérée comme une valeur
server.port=8080
server.context-path=/demo
#Paramètres du client OAuth2 (cette application)
#Informations d'identification du client
security.oauth2.client.client-id=${DEMO__GITHUB_OAUTH_CLIENT_ID}
security.oauth2.client.client-secret=${DEMO__GITHUB_OAUTH_CLIENT_SECRET}
#URI d'acquisition de jeton d'accès
security.oauth2.client.access-token-uri=https://github.com/login/oauth/access_token
#URI d'autorisation
security.oauth2.client.user-authorization-uri=https://github.com/login/oauth/authorize
#Schéma d'authentification
security.oauth2.client.client-authentication-scheme=form
#Paramètres du serveur de ressources OAuth2 (GitHub)
#URI d'acquisition des informations utilisateur
security.oauth2.resource.user-info-uri=https://api.github.com/user
#Obtenir des informations utilisateur à partir de ressources au lieu de jetons d'accès
security.oauth2.resource.prefer-token-info=false
#Configurer SSO avec OAuth2
#URL de connexion SSO (rediriger l'URI lorsqu'il n'est pas authentifié)
security.oauth2.sso.login-path=/login