鍵漏洩+springセキュリティログアウトの実現方法
13187 ワード
本当に頑張りました...
ほとんどの場合、私が使用しているサーバHttpSecurityは次のとおりです.
ログアウトの実現方法がわかりません.
しかしuriを構築するのはとても良いことを知っています.
デフォルトでは、システムがログアウトしたurlは/logoutに設定されています.
ログアウトに成功した場合はlogoutSuccessHandler
私が設定したuriの鍵管理セッションのエンドポイントに送信します.
では、鍵ロックセッションがクリアされると、セッションは私が送信したredirect uriパラメータにリダイレクトされます.
実装コードを見てみましょう
SecurityConfig.java
ほとんどの場合、私が使用しているサーバHttpSecurityは次のとおりです.
ログアウトの実現方法がわかりません.
しかしuriを構築するのはとても良いことを知っています.
デフォルトでは、システムがログアウトしたurlは/logoutに設定されています.
ログアウトに成功した場合はlogoutSuccessHandler
私が設定したuriの鍵管理セッションのエンドポイントに送信します.
では、鍵ロックセッションがクリアされると、セッションは私が送信したredirect uriパラメータにリダイレクトされます.
実装コードを見てみましょう
SecurityConfig.java package com.dream.gatewayservice.config;
import java.net.URI;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.web.server.ServerHttpSecurity;
import org.springframework.security.web.server.SecurityWebFilterChain;
import org.springframework.security.web.server.authentication.logout.RedirectServerLogoutSuccessHandler;
import org.springframework.security.web.server.authentication.logout.ServerLogoutSuccessHandler;
@Configuration
public class SecurityConfig {
@Bean
public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
http.authorizeExchange().pathMatchers("/menu/**", "/product/**").permitAll().and().authorizeExchange()
.anyExchange().authenticated().and().oauth2Login();
http.logout().logoutUrl("/logout")
.logoutSuccessHandler(logoutSuccessHandler(
"http://너님의 ip주소:8080/auth/realms/MSA/protocol/openid-connect/logout?redirect_uri=http://localhost:8000/menu/list"))
; //이건 keycloak 세션 엔드포인트 주소인데, 파라미터로 redirect_uri 보내면 로그아웃
//성공 시 redirect_uri로 보내줌
http.csrf().disable();
return http.build();
}
public ServerLogoutSuccessHandler logoutSuccessHandler(String uri) {
RedirectServerLogoutSuccessHandler successHandler = new RedirectServerLogoutSuccessHandler();
successHandler.setLogoutSuccessUrl(URI.create(uri));
return successHandler;
}
}
build.gradle plugins {
id 'org.springframework.boot' version '2.6.3'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
group = 'com.dream'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
ext {
set('springCloudVersion', "2021.0.1")
set('keyCloakVersion', "16.1.1")
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.cloud:spring-cloud-starter-config'
implementation 'org.springframework.boot:spring-boot-starter-webflux'
//webflux안에 security가 들어있는것으로 판단됨
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
//security 설정
implementation 'org.springframework.cloud:spring-cloud-starter-gateway'
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
//implementation 'org.keycloak:keycloak-spring-boot-starter'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
mavenBom "org.keycloak.bom:keycloak-adapter-bom:${keyCloakVersion}"
}
}
tasks.named('test') {
useJUnitPlatform()
}
もし助けがあれば、Heartをください.
Reference
この問題について(鍵漏洩+springセキュリティログアウトの実現方法), 我々は、より多くの情報をここで見つけました
https://velog.io/@tkaqhcjstk/keycloak-spring-security-로그아웃-구현-방법
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
package com.dream.gatewayservice.config;
import java.net.URI;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.web.server.ServerHttpSecurity;
import org.springframework.security.web.server.SecurityWebFilterChain;
import org.springframework.security.web.server.authentication.logout.RedirectServerLogoutSuccessHandler;
import org.springframework.security.web.server.authentication.logout.ServerLogoutSuccessHandler;
@Configuration
public class SecurityConfig {
@Bean
public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
http.authorizeExchange().pathMatchers("/menu/**", "/product/**").permitAll().and().authorizeExchange()
.anyExchange().authenticated().and().oauth2Login();
http.logout().logoutUrl("/logout")
.logoutSuccessHandler(logoutSuccessHandler(
"http://너님의 ip주소:8080/auth/realms/MSA/protocol/openid-connect/logout?redirect_uri=http://localhost:8000/menu/list"))
; //이건 keycloak 세션 엔드포인트 주소인데, 파라미터로 redirect_uri 보내면 로그아웃
//성공 시 redirect_uri로 보내줌
http.csrf().disable();
return http.build();
}
public ServerLogoutSuccessHandler logoutSuccessHandler(String uri) {
RedirectServerLogoutSuccessHandler successHandler = new RedirectServerLogoutSuccessHandler();
successHandler.setLogoutSuccessUrl(URI.create(uri));
return successHandler;
}
}
plugins {
id 'org.springframework.boot' version '2.6.3'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
group = 'com.dream'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
ext {
set('springCloudVersion', "2021.0.1")
set('keyCloakVersion', "16.1.1")
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.cloud:spring-cloud-starter-config'
implementation 'org.springframework.boot:spring-boot-starter-webflux'
//webflux안에 security가 들어있는것으로 판단됨
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
//security 설정
implementation 'org.springframework.cloud:spring-cloud-starter-gateway'
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
//implementation 'org.keycloak:keycloak-spring-boot-starter'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
mavenBom "org.keycloak.bom:keycloak-adapter-bom:${keyCloakVersion}"
}
}
tasks.named('test') {
useJUnitPlatform()
}
もし助けがあれば、Heartをください.Reference
この問題について(鍵漏洩+springセキュリティログアウトの実現方法), 我々は、より多くの情報をここで見つけました https://velog.io/@tkaqhcjstk/keycloak-spring-security-로그아웃-구현-방법テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol