피드로 돌아가기
Building a Google OAuth CLI in Rust with PKCE (and surviving the borrow checker)
Dev.toDev.to
Security

Rust와 PKCE로 구현한 보안 강화 Google OAuth CLI

Building a Google OAuth CLI in Rust with PKCE (and surviving the borrow checker)

Avinash Pokhrel2026년 4월 4일3intermediate

Context

CLI 및 데스크톱 앱 같은 Public Client는 Client Secret을 안전하게 보관하기 어려운 구조. 인증 코드가 탈취될 경우 악의적인 사용자가 토큰을 획득할 수 있는 보안 취약점 존재.

Technical Solution

  • PKCE(Proof Key for Code Exchange)를 도입하여 Client Secret 없이도 인증 코드의 정당성을 검증하는 보안 체계 구축
  • code_verifiercode_challenge를 생성하여 인증 요청과 토큰 교환 단계에서 일치 여부를 확인하는 검증 로직 구현
  • localhost:0 바인딩 방식을 통해 OS가 가용 포트를 자동으로 할당하도록 설계하여 포트 충돌 문제 해결
  • 로컬 HTTP 서버를 일시적으로 구동하여 브라우저의 OAuth 콜백을 직접 수신하는 루프백 인터페이스 구조 채택
  • Rust의 Ownership과 Lifetime 시스템을 활용하여 메모리 안정성이 확보된 고성능 바이너리 구현

Key Takeaway

Public Client 환경에서는 Secret 저장 방식 대신 PKCE와 같은 동적 검증 메커니즘을 통해 인증 흐름의 무결성을 확보해야 함.


CLI 도구 개발 시 Secret 노출 위험을 방지하기 위해 Google Cloud Console에서 'Desktop app' 유형으로 클라이언트를 설정하고 PKCE 흐름을 적용할 것

원문 읽기