본문으로 건너뛰기
AZ Tools

OAuth 2.0 PKCE 생성기

OAuth 2.0 PKCE(RFC 7636)용 code_verifier + S256/plain code_challenge 생성. authorization URL과 토큰 교환 curl까지 자동 작성.

사용법

  1. Verifier 길이 설정(기본 64, 최소 43, 최대 128).
  2. S256(항상 권장) 또는 plain(레거시 서버용) 선택.
  3. client_id, redirect_uri, scope, OAuth 엔드포인트 입력.
  4. 사용자를 authorization URL로 보내고, ?code=... 콜백을 받으면 curl을 실행해 토큰 획득.

자세한 설명

펼치기

PKCE(Proof Key for Code Exchange, RFC 7636)는 client_secret을 안전하게 보관할 수 없는 모든 퍼블릭 클라이언트(SPA, 모바일, 데스크톱 앱)에 권장되는 현대 OAuth 2.0 플로우입니다. 이 도구는 암호학적으로 안전한 code_verifier(unreserved URI 문자 43-128자)를 생성하고, code_challenge(S256은 SHA-256 base64url, plain은 verifier 그대로)를 유도하며, CSRF 방어용 state를 포함한 전체 authorization URL을 만듭니다. 함께 제공되는 curl 예제로 토큰 교환 단계까지 바로 처리할 수 있습니다 — 콜백 리다이렉트의 code만 붙여넣으면 됩니다.

자주 묻는 질문

S256 vs plain, 무엇을 써야 하나요?

항상 S256. plain은 verifier를 challenge로 그대로 보내기 때문에 authorization 요청이 가로채이면 보호 효과가 없습니다. S256은 SHA-256 결과만 보내고 verifier 자체는 1단계에 노출되지 않아 가로채기 공격이 훨씬 어려워집니다. RFC 7636도 S256이 가능하면 plain을 거부하라고 명시합니다.

Verifier 문자 집합이 왜 이런가요?

RFC 7636이 verifier 알파벳을 [A-Z][a-z][0-9]-._~(RFC 3986의 unreserved URI 문자)로 지정합니다. 덕분에 URL·헤더·폼 본문 어디서든 이스케이프 없이 안전하게 사용할 수 있습니다.

state는 무엇인가요?

클라이언트가 요청마다 생성해 콜백에서 검증하는 불투명 난수 문자열입니다. CSRF 방어: 공격자가 사용자를 악의적 authorization 리다이렉트로 유도해도 앱이 기억한 state와 일치하지 않아 응답을 거부할 수 있습니다. 항상 사용하세요.

어디서 실행되나요?

전적으로 브라우저 안에서. Verifier는 crypto.getRandomValues()로, SHA-256은 crypto.subtle.digest()로 — 모두 Web Crypto API. 외부로 전송되지 않습니다.

관련 도구