[JAVA] SSO avec GitHub OAuth dans l'environnement Spring Boot 1.5.x

Chose que tu veux faire

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.

environnement

Spring Boot 1.5.15 + JDK 1.8 + Maven

À propos de la technologie utilisée

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

SSO avec OAuth 2.0

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 danssecurity.oauth2.client. *`. https://spring.io/projects/spring-security-oauth

la mise en oeuvre

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

J'étais accro à

Recommended Posts

SSO avec GitHub OAuth dans l'environnement Spring Boot 1.5.x
Création d'un environnement de base de données avec Docker dans Spring Boot (IntellJ)
Connectez-vous avec HttpServletRequest # login dans Spring Security dans l'environnement Servlet 3.x
Utiliser le cache avec EhCashe 2.x avec Spring Boot
Testez le contrôleur avec Mock MVC dans Spring Boot
Traitement asynchrone avec exécution régulière dans Spring Boot
Utiliser le filtre de servlet avec Spring Boot [compatible Spring Boot 1.x, 2.x]
Créez des projets Spring Boot par environnement avec Gradle
[Java] Hello World avec Java 14 x Spring Boot 2.3 x JUnit 5 ~
Créer un environnement Spring Boot avec Windows + VS Code
Créer un environnement de développement Spring Boot avec docker
Environnement de développement-développement Spring Boot-
Télécharger avec Spring Boot
Inclure le pot externe dans le package avec Spring boot2 + Maven3
Changer d'environnement avec Spring Boot application.properties et l'annotation @Profile
Jusqu'à ce que vous commenciez à développer avec Spring Boot dans eclipse 1
Comment démarrer par environnement avec Spring Boot de Maven
Jusqu'à ce que vous commenciez à développer avec Spring Boot dans eclipse 2
[Spring Boot] Construction de l'environnement (macOS)
Générer un code à barres avec Spring Boot
Hello World avec Spring Boot
Implémenter GraphQL avec Spring Boot
Démarrez avec Spring Boot
Multi-projets Spring Boot 2 avec Gradle
Exécutez LIFF avec Spring Boot
Connexion SNS avec Spring Boot
Téléchargement de fichiers avec Spring Boot
Spring Boot commençant par copie
Spring Boot à partir de Docker
Hello World avec Spring Boot
Définir des cookies avec Spring Boot
Utiliser Spring JDBC avec Spring Boot
Construction de l'environnement Docker × Spring Boot
Changements majeurs dans Spring Boot 1.5
Ajouter un module avec Spring Boot
Premiers pas avec Spring Boot
NoHttpResponseException dans Spring Boot + WireMock
Créer un micro service avec Spring Boot
Envoyer du courrier avec Spring Boot
Spring Boot 1.x atteindra EOL l'année prochaine.
Changez la cible d'injection pour chaque environnement avec Spring Boot 2
Utilisez thymeleaf3 avec le parent sans spécifier spring-boot-starter-parent dans Spring Boot
Développement facile d'applications Web avec STS et Spring Boot. Dans 10 minutes.
Paramètres du chemin de contexte Spring Boot 2.x
Spring Boot Hello World dans Eclipse
Développement d'applications Spring Boot dans Eclipse
◆ Spring Boot + note de construction de l'environnement gradle
Introduction à Spring Boot x Open API ~ Open API créée avec le modèle d'écart de génération ~
Créez une application avec Spring Boot 2
Liaison de base de données avec doma2 (Spring boot)
Environnement Java Spring dans vs Code
Écrire du code de test avec Spring Boot
Record de lutte pour Cassandra x Spring Boot
Programmation Spring Boot avec VS Code
Jusqu'à "Hello World" avec Spring Boot
Partie 1: Essayez d'utiliser la connexion OAuth 2.0 prise en charge par Spring Security 5 avec Spring Boot
Obtenez des résultats de validation avec Spring Boot
Authentification Oauth2 avec Spring Cloud Gateway
J'ai créé un formulaire de recherche simple avec Spring Boot + GitHub Search API.