로그인 OIDC 사용시 nonce 전달 프로세스 문의

안녕하세요

OIDC 적용을 완료하고, nonce 검증을 추가하려 합니다.
아래와 같은 방식으로 하면 이슈가 없을지 확인해주시면 감사하겠습니다.

  1. 사용자가 카카오로 로그인 버튼을 눌러 로그인 절차가 시작될 때, 서버에 nonce 값을 요청
  2. 서버는 nonce 값 생성 후 DB 에 저장
  3. 클라이언트는 loginWithKakaoTalk() 호출시 서버로부터 받은 nonce 를 추가하여 호출
  4. 획득한 idToken 으로 서버에 자체 로그인 (자체 액세스토큰 발급) 요청
  5. 서버에서는 idToken 의 페이로드값 중 nonce 필드를 획득 후 (2에서 저장) DB 에 존재하는지 확인
  6. 확인이 완료되면 해당 nonce 는 DB 에서 파기하고 후속 절차 진행

위와 같이 서버 발급 및 서버DB 를 통해 nonce 값을 검증하려 하는데요.
이렇게 해야 안전한 것이 맞을까요? 서버를 통하지 않고 클라에서 자체 생성 후 서버 로그인 요청시 nonce 를 함께 전달하는 방식은 의미 없는 것이 맞죠?

답변 기다릴게요.
감사합니다~!

안녕하세요.

문의 하신 내용처럼 서비스측에서 생성 및 저장해둔 nonce. 즉, 인지하고 있는 값을 사용하셔도 됩니다.

다만, nonce는 클라이언트에서 생성 및 전달 하셔도 무방합니다.
결국, 서비스에서는 id_token을 이용한 재생공격을 방지하고자 nonce 값을 사용하시기에 nonce가 사용되었는지가 중요할것 같습니다.

사용된바 없는 nonce가 전달된 경우 자체 토큰 발급을 진행하시고 사용된 nonce를 저장해 두시면 될것으로 보입니다. 또한, 획득한 id_token에는 발급시간(iat), 만료시간(exp)도 포함되어 있습니다. 이들 시간을 활용하시어 nonce 점검 및 처리 전에 시간만으로 유효성을 검사 하시는것도 좋습니다.

1개의 좋아요

넌스값이 이미 사용되었는지만 체크하면 되므로

미리 서버에서 받을 필요 없이
클라에서 임의 생성 후 전달하고
이후 서버에서 기사용여부를 체크하면

불필요한 서버로의 요청은 필요없겠네요.

감사합니다!