[JAVA] SSO mit GitHub OAuth in der Spring Boot 1.5.x-Umgebung

Was du machen willst

Ich möchte Single Sign-On (SSO) von OAuth 2.0 in der Spring Boot 1.5.15-Umgebung realisieren. Ich möchte GitHub OAuth als Autorisierungsserver verwenden.

Umgebung

Spring Boot 1.5.15 + JDK 1.8 + Maven

Über die verwendete Technologie

Spring Security Web https://spring.io/projects/spring-security Bietet eine Sicherheitsfilterkette zwischen dem Client und der Webanwendung. Jeder Filter kann die Zugriffsverweigerung nicht authentifizierter Benutzer filtern. Die Sicherheitsfilterkette wird vom Filterketten-Proxy verwaltet.

Spring Security-Einstellungen erben die Standardeinstellungsklasse WebSecurityConfigurerAdapter und überschreiben die erforderlichen.

Offizielle Referenz 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 //Konfigurationsklasse automatisch laden
@EnableWebSecurity //Aktivieren Sie die Federsicherheit
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(WebSecurity web) throws Exception {
        //Beschreiben der Filterketten-Proxy-Einstellungen (≒ Gesamteinstellungen) in der Web Security-Methodenkette
        ...
    }
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        //Beschreiben der Einstellungen der Filterkette (≒ detaillierte Einstellungen) in der HttpSecurity-Methodenkette
        ...
    }
}

Um Benutzerinformationen mit Thymeleaf zu verwenden, verwenden Sie 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

Ein Rahmen für die Autorisierung (AuthZ). OAuth 2.0 enthält vier Zeichen: ** Benutzer **, ** Autorisierungsserver **, ** Ressourcenserver ** und ** Client **. Der ** Benutzer ** autorisiert den ** Client **, die Ressourcen auf dem ** Ressourcenserver ** über den ** Autorisierungsserver ** zu verwenden.

Die folgenden Artikel sind sehr leicht verständlich zusammengefasst. https://qiita.com/busyoumono99/items/1092fdc64d5a64d021d5

SSO mit OAuth 2.0

In OAuth2.0 kann die Authentifizierung (Authentifizierung, AuthN) realisiert werden, indem Benutzerinformationen vom Ressourcenserver abgerufen und sortiert werden. Für SSO mit GitHub OAuth

Es wird.

Verwenden Sie Spring Security OAuth, um es mit Spring Security zu verwenden. Beschreiben Sie die Ressourceneinstellungen in security.oauth2.resource. * Of application.properties und die Clienteinstellungen insecurity.oauth2.client. *. https://spring.io/projects/spring-security-oauth

Implementierung

Die Ressourcen-URI lautet "/ 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(); //Für den Zugriff auf alle URIs ist eine Anmeldung erforderlich
    }
}

application.properties


#Beachten Sie, dass bis zur Pause ein Wert betrachtet wird

server.port=8080
server.context-path=/demo

#OAuth2-Client-Einstellungen (diese Anwendung)

#Client-Berechtigungsnachweis
security.oauth2.client.client-id=${DEMO__GITHUB_OAUTH_CLIENT_ID}
security.oauth2.client.client-secret=${DEMO__GITHUB_OAUTH_CLIENT_SECRET}
#Zugriffstoken-Erfassungs-URI
security.oauth2.client.access-token-uri=https://github.com/login/oauth/access_token
#Autorisierungs-URI
security.oauth2.client.user-authorization-uri=https://github.com/login/oauth/authorize
#Authentifizierungsschema
security.oauth2.client.client-authentication-scheme=form

#Einstellungen für den OAuth2-Ressourcenserver (GitHub)

#URI zur Erfassung von Benutzerinformationen
security.oauth2.resource.user-info-uri=https://api.github.com/user
#Abrufen von Benutzerinformationen aus Ressourcen anstelle von Zugriffstoken
security.oauth2.resource.prefer-token-info=false

#SSO mit OAuth2 einstellen

#SSO-Anmelde-URL (URI umleiten, wenn nicht authentifiziert)
security.oauth2.sso.login-path=/login

Ich war süchtig nach

Recommended Posts

SSO mit GitHub OAuth in der Spring Boot 1.5.x-Umgebung
Erstellen einer Datenbankumgebung mit Docker in Spring Boot (IntellJ)
Melden Sie sich mit HttpServletRequest # in Spring Security in der Servlet 3.x-Umgebung an
Verwenden Sie den Cache mit EhCashe 2.x mit Spring Boot
Testen Sie den Controller mit Mock MVC im Spring Boot
Asynchrone Verarbeitung mit regelmäßiger Ausführung in Spring Boot
Servlet-Filter mit Spring Boot verwenden [Spring Boot 1.x, 2.x kompatibel]
Erstellen Sie mit Gradle Spring Boot-Projekte nach Umgebung
[Java] Hallo Welt mit Java 14 x Spring Boot 2.3 x JUnit 5 ~
Erstellen Sie eine Spring Boot-Umgebung mit Windows + VS-Code
Erstellen Sie mit Docker eine Spring Boot-Entwicklungsumgebung
Spring Boot Entwicklung-Entwicklungsumgebung-
Mit Spring Boot herunterladen
Nehmen Sie das externe Glas mit Spring boot2 + Maven3 in das Paket auf
Wechseln Sie die Umgebung mit Spring Boot application.properties und @ Profile-Annotation
Bis Sie mit der Entwicklung mit Spring Boot in Eclipse 1 beginnen
Booten nach Umgebung mit Spring Boot of Maven
Bis Sie mit der Entwicklung mit Spring Boot in Eclipse 2 beginnen
[Spring Boot] Umgebungskonstruktion (macOS)
Generieren Sie mit Spring Boot einen Barcode
Hallo Welt mit Spring Boot
Implementieren Sie GraphQL mit Spring Boot
Beginnen Sie mit Spring Boot
Spring Boot 2 Multiprojekt mit Gradle
Führen Sie LIFF mit Spring Boot aus
SNS-Login mit Spring Boot
Datei-Upload mit Spring Boot
Spring Boot beginnt mit dem Kopieren
Spring Boot beginnend mit Docker
Hallo Welt mit Spring Boot
Setzen Sie Cookies mit Spring Boot
Verwenden Sie Spring JDBC mit Spring Boot
Aufbau der Docker x Spring Boot-Umgebung
Wichtige Änderungen in Spring Boot 1.5
Modul mit Spring Boot hinzufügen
Erste Schritte mit Spring Boot
NoHttpResponseException in Spring Boot + WireMock
Erstellen Sie mit Spring Boot einen Mikrodienst
Mail mit Spring Boot verschicken
Spring Boot 1.x wird im nächsten Jahr EOL erreichen.
Ändern Sie das Injektionsziel für jede Umgebung mit Spring Boot 2
Verwenden Sie thymeleaf3 mit parent, ohne Spring-Boot-Starter-Parent in Spring Boot anzugeben
Einfache Entwicklung von Webanwendungen mit STS und Spring Boot. In 10 Minuten.
Einstellungen für den Spring Boot 2.x-Kontextpfad
Frühlingsstiefel Hallo Welt in Eclipse
Spring Boot-Anwendungsentwicklung in Eclipse
◆ Konstruktionsnotiz für Spring Boot + Gradle-Umgebung
Einführung in Spring Boot x Offene API ~ Offene API, erstellt mit Generationslückenmuster ~
Erstellen Sie eine App mit Spring Boot 2
Datenbankverknüpfung mit doma2 (Spring Boot)
Java Spring-Umgebung in vs Code
Schreiben Sie den Testcode mit Spring Boot
Cassandra x Spring Boot Kampfrekord
Spring Boot Programmierung mit VS Code
Bis "Hallo Welt" mit Spring Boot
Teil 1: Versuchen Sie, die von Spring Security 5 unterstützte OAuth 2.0-Anmeldung mit Spring Boot zu verwenden
Erhalten Sie Validierungsergebnisse mit Spring Boot
Oauth2-Authentifizierung mit Spring Cloud Gateway
Ich habe ein einfaches Suchformular mit Spring Boot + GitHub Search API erstellt.