본문 바로가기
언어, 환경별 예제 코드

카카오 로그인 OIDC(OpenID Connect) JWT 서명검증 (JAVA)

by kakao-TAM2 2022. 6. 7.

ID 토큰은 제 3자인 카카오 인증 서버에서 발급하므로, 서비스 보안을 위해 유효한 ID 토큰인지 검증하고 사용해야 합니다.
JWT 서명 검증은 지원하는 라이브러리를 사용하거나 RFC7516 규격에 따라 직접 구현하시어 검증할 수 있습니다.

이 글은 auth0 java-jwt 라이브러리를 사용한 예제를 담고 있습니다.

Gradle

gradle에 아래 의존 라이브러리를 추가 합니다.

implementation 'com.auth0:java-jwt:3.19.0'
implementation 'com.auth0:jwks-rsa:0.21.1'

구현코드

String idToken = "...";

// 1. 검증없이 디코딩
DecodedJWT jwtOrigin = JWT.decode(idToken);

// 2. 공개키 프로바이더 준비
JwkProvider provider = new JwkProviderBuilder("https://kauth.kakao.com")
		.cached(10, 7, TimeUnit.DAYS) // 7일간 최대 10개 캐시
		.build();
Jwk jwk = provider.get(jwtOrigin.getKeyId());

// 3. 검증 및 디코딩
Algorithm algorithm = Algorithm.RSA256((RSAPublicKey) jwk.getPublicKey(), null);
JWTVerifier verifier = JWT.require(algorithm)
		.build();
DecodedJWT jwt = verifier.verify(idToken);
주의! 공개키 프로바이더는 반드시 싱글톤 객채로 구현 하십시오.
예제와 같이 함수 내에 구현 시, 매번 kakao에 접속해야 하는 성능이슈가 발생하며 카카오로 부터 요청이 차단될수도 있습니다.

 

댓글