OAuth 2.0 PKCE 생성기
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`만 붙여넣으면 됩니다.
사용법
- Verifier 길이 설정(기본 64, 최소 43, 최대 128).
- S256(항상 권장) 또는 plain(레거시 서버용) 선택.
- `client_id`, `redirect_uri`, `scope`, OAuth 엔드포인트 입력.
- 사용자를 authorization URL로 보내고, `?code=...` 콜백을 받으면 curl을 실행해 토큰 획득.
자주 묻는 질문
- 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. 외부로 전송되지 않습니다.
관련 도구
HTTP Basic 인증 인코더/디코더
`username:password`를 Base64 `Authorization: Basic` 헤더로 인코딩 — 또는 기존 헤더 붙여넣어 누군지 확인.
CAA 레코드 빌더 (DNS 인증 기관 권한 제한)
CAA (Certificate Authority Authorization) DNS 레코드 생성 — 신뢰하는 CA만 도메인의 TLS 인증서를 발급할 수 있도록 제한. BIND 포맷 + 컨트롤 패널용 tag/value 분리 출력, 흔한 CA (Let's Encrypt, DigiCert, Google, Amazon 등) 원클릭 추가.
mailto: 링크 빌더
받는사람·참조·숨은참조·제목·본문을 입력해서 RFC 6068 규격으로 퍼센트 인코딩된 mailto: URL을 만듭니다. <a> 태그에 바로 붙여서 쓸 수 있습니다.
URI 템플릿 확장기 (RFC 6570)
직접 정의한 변수로 RFC 6570 URI 템플릿 확장 — 네 레벨 모두 지원: 경로·쿼리·프래그먼트·라벨·경로형 연산자, explode·prefix 수정자, 브라우저에서.
HTTP 상태 코드 레퍼런스
1xx-5xx 모든 HTTP 상태 코드 검색 — 요약·RFC·사용 시점·흔한 함정 포함.
QR 코드 생성
텍스트나 URL로 맞춤 QR 코드를 만들고 내려받으세요.
랜덤 창작 프롬프트 생성기
그림·글쓰기·사진·코딩 사이드프로젝트·세계관 구축을 위한 신선한 창작 프롬프트 — 한 번에 여러 개 뽑고 리롤로 새 배치를 받아 막힘을 깨뜨리세요.