Spring Security ‐ OAuth 2.0 MAC & RSA 토큰 검증 - dnwls16071/Backend_Summary GitHub Wiki
- 암호화 알고리즘 방식에 따라 직접 발행한 JWT 토큰을 대상으로 검증을 진행한다.
- 인가 서버에서 발행한 Access Token을 대상으로 검증을 진행한다.
- JwtDecoder 빈은 암호화 알고리즘 및 특정한 조건에 따라 각 생성되며 디코딩이 진행되면 주어진 알고리즘에 의해 검증하게 된다.
📚 MAC 검증 기능(JwtDecoder에 의한 검증)
JwtAuthorizationMacFilter : Bearer 토큰을 MAC 알고리즘에 의해 검증하며 검증 성공시 인증 및 인가를 처리하는 필터
MacSecuritySigner : MAC 기반 서명 및 토큰을 발행하는 클래스
📚 RSA 검증 기능(JwtAuthorizationRsaFilter에 의한 검증)
- SecretKey 기반 JwtDecoder 생성
- 대칭키 방식으로 생성된 토큰을 검증하기 위해 JWK를 상속한 OctetSequenceKey로 SecretKey 기반 JwtDecoder를 생성한다.
@Bean
@ConditionalOnProperty(prefix = "spring.security.oauth2.resourceserver.jwt", name = "jws-algorithms", havingValue = "HS256", matchIfMissing = false)
public JwtDecoder jwtDecoderBySecretKeyValue(OctetSequenceKey octetSequenceKey,OAuth2ResourceServerProperties properties) {
return NimbusJwtDecoder.withSecretKey(octetSequenceKey.toSecretKey())
.macAlgorithm(MacAlgorithm.from(properties.getJwt().getJwsAlgorithms().get(0)))
.build();
}
spring:
security:
oauth2:
resourceserver:
jwt:
jws-algorithms: HS256
📚 RSA 검증 기능(PublicKey.txt에 의한 검증)
- Java는 KeyStore라는 인터페이스를 통해 암호화/복호화 맟 전자 서명에 사용되는 Private Key, Public Key와 Certificate를 추상화하여 제공하고 있다.
- KeyStore에는 Secret Key, Private Key, Public Key, Certificate와 같은 보안 파일들이 저장되며 KeyStore에는 파일 시스템에 저장하고 암호로 보호할 수 있다.
- KeyStore에는 keytool을 사용해서 생성할 수 있으며 기본 타입은 jks이다.
keytool
- keytool은 자바에서 제공하는 유틸리티로 KeyStore 기반으로 인증서와 키를 관리할 수 있으며 JDK에 포함되어 있다.
- Keystore 생성 후 PrivateKey, PublicKey, Certificate 생성
- Private key 생성 :
keytool -genkeypair -alias apiKey -keyalg RSA -keypass "pass1234" -keystore apiKey.jks -storepass "pass1234"
- Certificate 생성 :
keytool -export -alias apiKey -keystore apiKey.jks -rfc -file trustServer.cer
- Public key 생성 :
keytool -import -alias trustServer -file trustServer.cer -keystore publicKey.jks
📚 BearerTokenAuthenticationFilter 검증 아키텍처