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.
Spring Boot 1.5.15 + JDK 1.8 + Maven
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
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
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
Recommended Posts