[java] JHipster와 SAML

JHipster는 자바 기반의 웹 애플리케이션 개발 도구로, SAML(Security Assertion Markup Language)을 사용하여 인증 및 권한 부여를 구현할 수 있습니다. 이를 통해 안전하고 효율적인 사용자 인증 및 권한 관리를 할 수 있습니다.

SAML이란?

SAML은 웹 기반 인증을 위한 XML 기반의 국제 표준입니다. 이는 서로 다른 도메인 및 서비스 간에 신뢰할 수 있는 인증 및 권한 부여를 제공하기 위해 개발되었습니다. SAML은 SSO(Single Sign-On) 환경을 지원하며, 사용자 인증 정보를 안전하게 전달하는 역할을 수행합니다.

JHipster에서 SAML 사용하기

JHipster에서 SAML을 사용하려면 몇 가지 단계를 따라야 합니다.

단계 1: JHipster 애플리케이션 생성

우선 JHipster 명령어를 사용하여 애플리케이션을 생성합니다.

jhipster

단계 2: JDL 파일 수정

생성된 애플리케이션의 .jdl 파일을 열고, entity 섹션 아래에 다음 코드를 추가합니다.

entity User {
    ...
    samlId String
    ...
}

단계 3: JDL 파일을 사용하여 엔티티 생성

작성한 JDL 파일을 사용하여 엔티티를 생성합니다.

jhipster import-jdl your-jdl-file.jdl

단계 4: SAML 종속성 추가

pom.xml 파일을 열고, dependencies 섹션에 다음 코드를 추가합니다.

<!-- SAML -->
<dependency>
    <groupId>org.springframework.security.extensions</groupId>
    <artifactId>spring-security-saml2-core</artifactId>
    <version>1.0.10.RELEASE</version>
</dependency>

단계 5: SAML 설정

application.yml 파일을 열고, SAML 설정을 추가합니다.

saml:
    key-store: classpath:saml/keystore.jks
    key-store-password: secret
    key-alias: jhipster
    key-password: secret
    idp:
        metadata-url: https://idp.example.com/metadata
        entity-id: https://your-app.com/saml/metadata
        binding: post
        signature-algorithm: RSA_SHA256
        digest-algorithm: SHA256
        force-authn: false

단계 6: 보안 설정

SecurityConfiguration.java 파일을 열고, Security 설정을 수정합니다.

import ...
import org.springframework.security.saml.SAMLConfigurer;

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    ...

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        ...
        http
            .apply(SamlConfigurer.saml())
                .userDetailsService(userDetailsService())
                .sso()
                    .defaultSuccessURL("/home")
                .and()
                .logout()
                    .defaultLogoutSuccessUrl("/logout")
                .and()
                .csrf()
                    .disable();
    }

    ...
}

단계 7: SAML 인증 테스트

애플리케이션을 시작하고 브라우저를 열어 your-app.com/saml/login을 입력하여 SAML 인증을 테스트합니다.

요약

JHipster를 사용하여 SAML을 구현하면 안전하고 효율적인 사용자 인증 및 권한 관리를 할 수 있습니다. 이를 통해 사용자가 여러 서비스에서 단일 인증으로 접근할 수 있으며, 보안 취약점을 줄일 수 있습니다.

참고 자료