Spring Security - Nimbus JOSE+JWT Library 관련 설정

TopOfTheHead·2026년 5월 27일

Spring Security

목록 보기
13/27

Nimbus JOSE+JWT Library :
OAuth2.0 Resource Server dependency를 추가할 경우 자동으로 같이 추가됨.
Java에서 JWT, JWK , JWE( JSON Web Encryption ) , JWS ( JSON Web Signature )를 쉽게 다룰 수 있도록 지원하는 오픈소스 Library.
JWT의 검증 , Encryption & Decryption , Public Key 관리 등의 기능을 제공하는 도구.

Spring Security는 기본적으로 Nimbus Library를 활용하여 JWTDecrypt.

HTTPSecurity객체.oauth2ResourceServer(람다식)
OAuth2.0 Resorce Server를 이용하여 HTTP RequestAuthentication Header에 포함된 Access Token ( ex. JWT, Opaque Token 등 )을 전달받아 JWT Decoder의 Instance에 의해 Decryption을 수행 및 유효성 검증을 수행하여 Authentication하는 Method.
▶ 검증을 수행한 후 AuthenticationHTTP Request에 대해서만 API에 접근할 수 있도록 처리.

HttpSecurity객체.oauth2ResourceServer(람다식)의 람다식 매개변수는 OAuth2ResourceServerConfigurer 객체를 매개변수로 전달.
▶ 해당 Instance에서 .jwt() , .opaqueToken()을 설정하여 Resource ServerAccess Token 검증방식 선택.

JwtDecoder Interface의 구현체의 Instance를 생성하는 @Bean Method를 정의하여 EncryptJWT TokenDecrypt 후 유효성을 검증하는 역할을 수행
JWTDecryption 및 검증하는 용도로 활용되므로, JWK URI에서 Key를 가져와서 Decrypt를 수행하는 JwtDecoder Instance를 생성하여 반환.

@Configuration
public class JwtSecurityConfiguration {
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
     	// OAuth2.0 Resorce Server를 통해 HTTP Request의 JWT를 Decryption하여 
        return http.oauth2ResourceServer(oauth2 -> oauth2
                        .jwt(jwt -> jwt
                                .decoder(jwtDecoder())
                        ))
                // HttpSecurity instance를 생성한 후 return.
                // HttpSecurity는 SecurityFilterChain interface의 구현 Class이므로
     			// SecurityFilterChain의 instance로 활용이 가능.		
                .build();
    }
     // JWT는 RSA로 Encrypt 된 상태이므로 JWK URI 에서 Key를 가져와서 
     // Decrypt 및 유효성을 검증하는 JwtDecoder Instance를 생성하는 @Bean Method.
    @Bean
    public JwtDecoder jwtDecoder() {
        return NimbusJwtDecoder.withJwkSetUri("https://auth-server-url/.well-known/jwks.json").build();
    }
}

OAuth2ResourceServerConfigurer
Spring Security에서 OAuth2.0 Resource ServerConfiguration을 수행하는 용도로 사용.
OAuth2.0 Access Token을 검증하는 보안필터를 설정.

HTTPSecurity객체.oauth2ResourceServer(람다식)람다식 매개변수로서 OAuth2ResourceServerConfigurer Instance가 전달
▶ 해당 Instance에서 .jwt() , .opaqueToken()을 설정하여 Resource ServerAccess Token 인증방식 선택

  • OAuth2ResourceServerConfigurer객체.jwt(람다식)
    OAuth2.0 Resource Server에서 JWT 기반 Authentication을 수행하는 Method.
    Resource ServerJWT Token을 검증하도록 설정.

    일반적으로 Resource Server에 의해 HTTP RequestJWTCustom JWT Decoder를 통해 Decrypt 하여 검증하는 용도로 사용.

    람다식 매개변수는 JwtConfigurer객체를 받는다.
    JwtConfigurer.decoder(JwtDecoder구현체Instance)를 통해 JWT Decoder 설정

JwtConfigurer
JWT 기반 Authentication Configuration을 수행.
▶ 주로 JWT TokenDecryption하는 용도로 사용됨.

OAuth2ResourceServerConfigurer.jwt(람다식)의 람다식 매개변수로 JwtConfigurer instance가 전달됨.

  • JwtConfigurer객체.decoder(JwtDecoder구현체Instance)
    JWTDecryption을 수행하는 JWT Decoder를 설정.

JwtDecoder
RSA를 통해 EncryptJWT TokenDecrypt 및 유효성을 검증하는 역할을 수행하는 Interface
NimbusJwtDecoder등의 구현 Class의 instance를 생성하여 JwtDecoder의 instance로 반환하는 Custom JWT Decoder @Bean Method를 정의하여 OAuth2ResourceServerConfigurer객체.jwt(람다식)에 활용.

RSA를 통해 EncryptJWT TokenDecryptPublic Key가 필요하므로, JWK URI 에서 Key를 가져와서 Decrypt를 수행.
JWT Signature의 검증을 수행하기 위해서 Public Key가 필요하므로 JWK를 활용한다.

 	// JWT는 RSA로 Encrypt 된 상태이므로 JWK URI 에서 Key를 가져와서 
     // Decrypt 및 유효성을 검증하는 JwtDecoder Instance를 생성하는 @Bean Method.
    @Bean
    public JwtDecoder jwtDecoder() {
        return NimbusJwtDecoder.withJwkSetUri("https://auth-server-url/.well-known/jwks.json").build();
    }

NimbusJwtDecoder :
Spring Security에서 제공하는 JWT Decoder로서 JWTDecrypt 및 유효성 검증을 수행하며 JwtDecoder Interface를 구현한 기본 Class
JWK URI, RSA Public Key 등을 통해 JWTSignature를 검증.

  • NimbusJwtDecoder.withJwkSetUri("JWK URI")
    RSA 암호화 알고리즘을 사용하는 JWTDecryptSignature의 유효성 검증 시 사용하는 NimbustJwtDecoder의 instance를 생성하는 static Method.
    JWK Set을 제공하는 Authentication Server가 정의된 JWK Set URI를 정의하여 자동으로 Public Key를 가져온 후 DecryptJWT Signature의 유효성 검증을 수행하는 JwtDecoder Instance를 생성

    JWK Set URI : JWK Set을 제공하는 URI
    https://example.com/oauth2/jwks : OAuth 2.0 Authentication Server가 제공하는 공개 키 목록.

  • NimbusJwtDecoder.withPublicKey(RSAPublicKey객체) :
    RSA 암호화 알고리즘을 사용하는 JWTDecryptSignature의 유효성 검증을 수행하는 NimbusJwtDecoder instance를 특정 RSAPublicKey instance를 활용하여 생성하는 Method.
    ▶ Client가 JWT를 Server에 전송 시 Server는 해당 Public Key 기반으로 생성된 NimbusJwtDecoder instance를 통해 전송된 JWT Signature를 유효성 검증 가능.

  • NimbusJwtDecoder.build() :
    NimbusJwtDecoder의 instance를 생성하는 builder method
    NimbusJwtDecoderJwtDecoder의 구현 Class이므로 해당 Interface의 instance로서 활용 가능.
            
profile
공부기록 블로그

0개의 댓글