안녕하세요.
OIDC를 통해 소셜 로그인을 구현하려고 합니다.
궁금한 점은, 자사 서비스 내 백앤드에서 받은 id토큰을 따로 서명 검증을 해야하는게 필수적인가요?
아니면, id토큰의 서명이나 페이로드 검증 없이 그냥 자사DB 내 등록된 유저인지 아닌지만 검증하여(페이로드에서 사용자 정보 추출) 로그인하거나 회원가입 처리를 해도 되는건가요?
안녕하세요.
OIDC를 통해 소셜 로그인을 구현하려고 합니다.
궁금한 점은, 자사 서비스 내 백앤드에서 받은 id토큰을 따로 서명 검증을 해야하는게 필수적인가요?
아니면, id토큰의 서명이나 페이로드 검증 없이 그냥 자사DB 내 등록된 유저인지 아닌지만 검증하여(페이로드에서 사용자 정보 추출) 로그인하거나 회원가입 처리를 해도 되는건가요?
안녕하세요.
OpenID Connect 사용 시 ID 토큰 재생 공격을 방지하기 위해 nonce
파라미터 사용을 권장합니다.
OpenID Connect를 통해 ID 토큰을 함께 발급받을 경우, ID 토큰 재생 공격을 방지하기 위해 사용합니다. ID 토큰 유효성 검증 시 대조할 고유한 난수 값을 nonce
파라미터로 전달합니다.
2.5. nonce 파라미터 사용 Kakao Developers
nonce값을 통한 검증은 추가한 상태입니다.
nonce값을 통한 검증을 포함하여 payload 검증(aud, exp, iss 확인)을 한다면, id토큰의 signature에 대한 검증(공개키를 통한 검증)없이 회원가입이나 로그인 처리를 해도 된다고 이해하면 될까요?
인가코드 요청 시, 백엔드에 세션ID나 키해시 전달하며 발급받은 nonce 값을 pair로 세팅하고
리다이렉트 URI에 인가코드 받아
백엔드에서 ID토큰 발급 받으며 nonce 값 검증하고 nonce와 payload 서버 캐싱하여 사용시 마다 nonce와 payload 값 검증하면 토큰 발급과 사용사이에 외부 개입할 여지가 없어보이는데요.
페이로드 검증은 어떻게 하실 생각이셨나요?
가이드에서는 서명 검증도 하도록 안내하고 있습니다.
3. ID 토큰 유효성 검증하기
ID 토큰은 제 3자인 카카오 인증 서버에서 발급하므로, 서비스 보안을 위해 유효한 ID 토큰인지 검증하고 사용해야 합니다. 다음 순서로 ID 토큰을 검증합니다. 페이로드 값 확인 시, 필요에 따라 디버깅 목적으로 제공되는 ID 토큰 정보 보기 API를 사용할 수 있습니다.
iss
값이 https://kauth.kakao.com
와 일치하는지 확인aud
값이 서비스 앱 키와 일치하는지 확인exp
값이 현재 UNIX 타임스탬프(Timestamp)보다 큰 값인지 확인(ID 토큰이 만료되지 않았는지 확인)nonce
값이 카카오 로그인 요청 시 전달한 값과 일치하는지 확인서명 검증은 다음 순서로 진행합니다.
kid
에 해당하는 공개키 값 확인보내주신 ID 토큰 유효성 검증하기에서 페이로드 검증 가이드를 따라 검증하고 있습니다!