본문 바로가기

OAuth PKCE 생성기

브라우저 처리

OAuth 2.0 PKCE의 code_verifier를 안전한 난수로 만들고 S256 code_challenge를 계산합니다. 이미 가진 verifier를 넣어 서버가 기대하는 challenge 값을 확인할 수도 있습니다.

사용 전 확인
  • 파일·이미지·문서 처리 도구는 브라우저 안에서 처리되더라도 원본에 개인정보나 민감 정보가 포함될 수 있습니다. 공유·제출 전 원본과 결과를 한 번 더 확인하세요.
도구 실행입력 후 결과 확인
OAuth PKCE 생성기 샘플 실행

PKCE(RFC 7636)는 모바일 앱이나 SPA처럼 비밀키를 안전하게 둘 수 없는 클라이언트가 인가 코드를 가로채이지 않도록 쓰는 방식입니다. 이 도구는 브라우저의 암호학적 난수로 code_verifier를 만들고, SHA-256 해시를 Base64URL로 바꾼 code_challenge를 함께 보여 줍니다.

브라우저 처리
샘플 결과
code_verifier=dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
code_challenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM
code_challenge_method=S256
자바스크립트가 활성화되면 이 영역이 실제 입력, 실행, 결과 패널로 바뀝니다.

OAuth PKCE 생성기 사용 가이드

PKCE(RFC 7636)는 모바일 앱이나 SPA처럼 비밀키를 안전하게 둘 수 없는 클라이언트가 인가 코드를 가로채이지 않도록 쓰는 방식입니다. 이 도구는 브라우저의 암호학적 난수로 code_verifier를 만들고, SHA-256 해시를 Base64URL로 바꾼 code_challenge를 함께 보여 줍니다.

verifier는 RFC가 정한 A–Z, a–z, 0–9, - . _ ~ 66글자로만 만들며, 난수 바이트를 글자로 바꿀 때 치우침이 생기지 않도록 일부 값을 버리고 다시 뽑습니다. 길이는 length=43~128로 정하고 기본은 64자입니다.

verifier=값을 넣으면 새로 만들지 않고 그 값의 challenge만 계산합니다. 로그인 연동 중 서버가 'invalid code_verifier'를 돌려줄 때, 앱이 보낸 값과 계산 결과를 대조해 원인을 찾을 수 있습니다. method=plain을 쓰면 challenge가 verifier와 같아집니다.

사용 방법

  1. '옵션' 칸에 length=64, method=S256처럼 적습니다. 기존 값을 확인하려면 verifier=값을 적습니다.
  2. '실행'을 누르면 code_verifier, code_challenge, code_challenge_method 세 줄이 나옵니다.
  3. 인가 요청에는 code_challenge와 method를, 토큰 요청에는 code_verifier를 넣습니다.

예시: RFC 7636 부록의 예제 값 확인

입력
verifier=dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
결과
code_verifier=dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
code_challenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM
code_challenge_method=S256

RFC 7636 부록 B에 실린 값과 같은 challenge가 나옵니다.

이럴 때 쓰면 좋아요

  • OAuth 로그인 연동을 Postman이나 curl로 수동 테스트할 때
  • 앱이 보낸 code_challenge가 verifier와 맞는지 디버깅할 때
  • 인증 서버의 PKCE 검증 로직에 넣을 테스트 값을 만들 때
  • PKCE 동작 원리를 문서나 교육 자료로 설명할 때

문제가 생겼을 때

서버가 'invalid_grant: PKCE verification failed'를 돌려줌

토큰 요청의 code_verifier가 인가 요청 때 만든 challenge의 원래 값이 아닙니다. 같은 verifier를 이 도구에 넣어 challenge가 일치하는지 확인하세요.

'length는 43~128 사이의 정수여야 합니다' 오류

RFC 7636이 verifier 길이를 43~128자로 정해 두었습니다. 특별한 이유가 없다면 기본값 64를 쓰세요.

활용 팁

  • plain 방식은 challenge가 그대로 노출되므로 S256을 쓸 수 없는 경우에만 사용하세요. 대부분의 인증 서버는 S256을 요구합니다.
  • verifier는 로그인 한 번에 한 번만 쓰는 값입니다. 테스트가 끝나면 재사용하지 말고 새로 만드세요.

자주 묻는 질문

만든 값이 어디에 저장되나요?

아니요. 난수와 해시 계산 모두 브라우저 안에서 이루어지고 결과는 화면에만 표시됩니다.

challenge 끝에 = 가 없어도 되나요?

네. RFC 7636은 Base64URL에서 = 채움 문자를 빼도록 정하고 있어 = 없이 43자가 정상입니다.

state나 nonce 값도 만들어 주나요?

이 도구는 PKCE 값만 만듭니다. state와 nonce는 별도의 무작위 문자열 생성기로 만들어 함께 쓰세요.