PKCE code_verifier·code_challenge 생성기

code_verifier 를 생성하거나 붙여 넣으면 OAuth 2.0 PKCE(RFC 7636)용 S256 code_challenge 를 계산합니다.

code_challenge (S256)

브라우저 안에서만 동작합니다. 입력한 내용은 전송·저장되지 않습니다.

사용 방법

  1. 생성 버튼으로 새 code_verifier 를 만들거나 직접 붙여 넣습니다.
  2. code_challenge 는 BASE64URL(SHA-256(code_verifier)) 로 계산됩니다.
  3. 인가 요청에 code_challenge 와 code_challenge_method=S256 을 보냅니다.
  4. 토큰 요청에 code_verifier 를 보냅니다.

PKCE(Proof Key for Code Exchange, RFC 7636)는 OAuth 2.0 인가 코드 흐름을 보호하는 방식으로, 시크릿을 숨길 수 없는 모바일 앱·SPA 를 위해 만들어졌습니다. 클라이언트는 일회용 비밀값 code_verifier 를 만들고 그 해시인 code_challenge 만 인가 요청에 보냅니다. 토큰을 받을 때 원래 verifier 를 보내면 서버가 둘을 대조하므로, 코드만 가로채서는 토큰을 받을 수 없습니다.

이 생성기는 crypto.getRandomValues 로 32바이트 난수를 뽑아 패딩 없는 base64url 로 인코딩하므로 verifier 는 43자입니다. code_challenge 는 그 SHA-256 을 같은 방식으로 인코딩해 항상 43자입니다. RFC 7636 에는 plain 도 있지만 SHA-256 을 계산할 수 있으면 S256 을 쓰도록 정해 두어 S256 만 제공합니다. 로그인 연동 디버깅에 쓰세요.

붙여 넣은 verifier 는 형식 검사 없이 해시하니, A-Z, a-z, 0-9, -, ., _, ~ 로 된 43~128자인지 확인하세요. verifier 는 요청마다 새로 만듭니다. 두 값 모두 브라우저의 Web Crypto API 로 계산하며 전송하지 않습니다.

자주 묻는 질문

PKCE 가 무엇인가요?

Proof Key for Code Exchange(RFC 7636)입니다. 인가 요청에는 해시한 code_challenge 를, 토큰 요청에는 원래 code_verifier 를 보내서 인가 코드만 탈취해서는 토큰을 받을 수 없게 합니다.

code_challenge 는 어떻게 계산하나요?

S256 방식은 code_verifier(ASCII)의 SHA-256 을 패딩 없는 base64url 로 인코딩합니다. RFC 7636 예시 verifier dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk 의 결과는 E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM 입니다.

생성된 verifier 가 왜 43자인가요?

32바이트 난수를 패딩 없는 base64url 로 인코딩하면 43자이고, 이는 RFC 7636 이 허용하는 최소 길이입니다(A-Z, a-z, 0-9, -, ., _, ~ 로 43~128자).

관련 도구