>  기사  >  Java  >  Java를 사용하여 Spring Security SAML 기반 Single Sign-On 시스템을 개발하는 방법

Java를 사용하여 Spring Security SAML 기반 Single Sign-On 시스템을 개발하는 방법

王林
王林원래의
2023-09-22 08:49:021705검색

如何使用Java开发一个基于Spring Security SAML的单点登录系统

Java를 사용하여 Spring Security SAML 기반의 Single Sign-On 시스템을 개발하는 방법

소개:
인터넷의 급속한 발전과 함께 점점 더 많은 애플리케이션이 개발됩니다. 이러한 애플리케이션에서 사용자 로그인은 가장 일반적인 기능 중 하나입니다. 그러나 엔터프라이즈 수준 애플리케이션의 경우 사용자는 여러 시스템에 로그인해야 하므로 사용자 로그인 경험이 매우 저하됩니다. 이러한 문제를 해결하기 위해 싱글 사인온(Single Sign-On, SSO라고도 함) 시스템이 등장했습니다.

소개:
Single Sign-On 시스템을 사용하면 사용자는 로그인 자격 증명을 반복적으로 입력할 필요 없이 한 번 로그인한 후 기업 내 다양한 ​​시스템의 애플리케이션에 액세스할 수 있습니다. Spring Security는 강력한 보안 프레임워크이며 SAML(Security Assertion Markup Language)은 도메인 간 인증 및 권한 부여를 위한 개방형 표준입니다.

이 글에서는 Java를 사용하여 Spring Security SAML 기반의 Single Sign-On 시스템을 개발하는 방법을 소개하고 구체적인 코드 예제를 제공합니다.

1단계: 준비

  1. Java, Spring Boot 및 Maven을 설치합니다.
  2. Spring Boot 프로젝트를 생성하고 spring-boot-starter-security, spring-security-saml2-core 및 spring-security-saml2-service-provider 종속성을 추가하세요.

2단계: SAML 구성

  1. application.properties 파일에서 SP 메타데이터, IDP 메타데이터 및 키 정보를 구성합니다.
# SP元数据
security.saml2.metadata.sp.entity-id=
security.saml2.metadata.sp.private-key-location=
security.saml2.metadata.sp.public-key-location=

# IDP元数据
security.saml2.metadata.idp.entity-id=
security.saml2.metadata.idp.single-sign-on-service.location=
security.saml2.metadata.idp.single-logout-service.location=

# 密钥信息
security.saml2.keystore.location=
security.saml2.keystore.password=
security.saml2.private-key.password=
  1. "SAMLWebSecurityConfig"라는 Java 클래스를 생성하고 "SAMLConfigurerAdapter"를 상속하며 해당 메서드를 재정의합니다.
@Configuration
@EnableWebSecurity
public class SAMLWebSecurityConfig extends SAMLConfigurerAdapter {

    @Autowired
    private SAMLUserDetailsService samlUserDetailsService;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/saml/**").permitAll()
                .anyRequest().authenticated()
                .and()
                .apply(saml())
                .userDetailsService(samlUserDetailsService);
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.authenticationProvider(samlAuthenticationProvider());
    }

    @Bean
    public SAMLConfigurer saml() {
        return new SAMLConfigurer();
    }

    @Bean
    public SAMLAuthenticationProvider samlAuthenticationProvider() {
        return new SAMLAuthenticationProvider();
    }
}
  1. "SAMLConfigurer"라는 Java 클래스를 생성하고 "SAMLConfigurerAdapter"를 상속하며 해당 메서드를 재정의합니다.
public class SAMLConfigurer extends SAMLConfigurerAdapter {

    @Override
    public void configure(SAMLServiceProviderConfigurer saml) throws Exception {
        saml.keyStore()
                .storeFilePath(keystoreLocation)
                .password(keystorePassword)
                .keyname(keyAlias)
                .keyPassword(keyPassword)
                .and()
                .protocol(PROTOCOL)
                .hostname(HOSTNAME)
                .basePath(BASE_PATH)
                .entityId(SP_ENTITY_ID)
                .metadataFilePath(SP_METADATA_LOCATION);
    }
}

3단계: 사용자 서비스 생성

  1. "SAMLUser"라는 Java 클래스를 생성하고 "SAMLUserDetailsService" 인터페이스를 구현한 후 해당 메서드를 구현합니다.
@Service
public class SAMLUser implements SAMLUserDetailsService {

    @Override
    public Object loadUserBySAML(SAMLCredential credential) throws UsernameNotFoundException {
        String username = credential.getNameID().getValue();

        // 根据用户名查询用户信息
        // ...

        // 返回用户详细信息
        return new User(username, "", new ArrayList<>());
    }
}

4단계: 컨트롤러 만들기

  1. 성공적인 로그인 후 점프를 처리하기 위해 "HomeController"라는 Java 클래스를 만듭니다.
@Controller
public class HomeController {

    @RequestMapping("/")
    public String home() {
        return "home";
    }
}
  1. 로그아웃을 처리하기 위해 "LogoutController"라는 Java 클래스를 만듭니다.
@Controller
public class LogoutController {

    @RequestMapping("/logout")
    public String logout() {
        return "logout";
    }
}

5단계: 뷰 만들기

  1. src/main/resources/templates 디렉터리에 home.html과 logout.html이라는 두 개의 템플릿 파일을 만듭니다.

home.html:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Home</title>
</head>
<body>
    <h1>Welcome to Home Page</h1>
</body>
</html>

logout.html:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Logout</title>
</head>
<body>
    <h1>You have been logged out</h1>
</body>
</html>

요약:
이 시점에서 우리는 Java를 사용하여 Spring Security SAML 기반 싱글 사인온 시스템을 개발하는 단계를 완료했습니다. SAML을 구성하고 사용자 서비스를 생성함으로써 우수한 사용자 경험을 제공하는 안정적이고 안전한 로그인 시스템을 구현할 수 있습니다.

참조:

  1. Spring Security SAML 공식 문서: https://docs.spring.io/spring-security-saml/docs/current/reference/htmlsingle/

위 내용은 Java를 사용하여 Spring Security SAML 기반 Single Sign-On 시스템을 개발하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.