암시적 플로우 vs. 권한 부여 코드 플로우: 왜 암시적 플로우는 쓸모없게 되었는가?
OAuth 2.0에 "권한 부여 코드 플로우"가 있는 이유는 무엇일까요, 이미 "암시적 플로우"가 있는데 말이죠? 이 두 가지 인증 유형의 세부 사항을 살펴보고 암시적 플로우 사용을 피해야 하는 이유를 알아봅시다.
OAuth 2.0에 "권한 부여 코드 플로우"가 있는 이유는 무엇일까요, 이미 "암시적 플로우"가 있는데 말이죠? 이 두 가지 인증 유형의 세부 사항을 살펴보고 암시적 플로우 사용을 피해야 하는 이유를 알아봅시다.
권한 부여 코드 플로우와 암시적 플로우는 웹 애플리케이션의 안전하고 효율적인 사용자 인증을 가능하게 하는 OAuth 2.0에서 가장 많이 사용되는 두 인증 유형입니다. 두 플로우 모두 사용자가 자신의 자격 증명을 직접 노출하지 않고 애플리케이션에 접근 권한을 부여할 수 있는 인증 프로세스를 구현합니다. 암시적 플로우는 처음에는 브라우저 제한 사항을 해결하기 위해 개발되었으나, 현대 웹 기술의 출현으로 인해 권한 부여 코드 플로우는 그 향상된 보안 기능 덕분에 많은 개발자들에게 선호되는 선택이 되었습니다.
이 기사에서는 이 두 인증 유형의 차이점을 살펴보고, 왜 암시적 플로우 대신 권한 부여 코드 플로우를 사용하는 것이 좋은지 설명하겠습니다.
이 두 인증 유형의 세부 사항을 살펴보기 전에, OAuth 2.0이 무엇인지, 그리고 왜 현대 웹 애플리케이션에 필수적인지 이해해봅시다.
OAuth에 대해 이야기할 때, 우리는 일반적으로 OAuth 2.0을 의미합니다. "Open Authorization"으로 알려진 이 프로토콜은 웹사이트나 애플리케이션이 사용자를 대신하여 다른 웹 서비스의 리소스를 사용할 수 있게 하는 프로토콜입니다. 2012년에 OAuth 1.0을 대체하였고, 이후로 디지털 인증의 널리 받아들여진 표준이 되었습니다. OAuth 2.0은 사용자의 로그인 정보를 공개하지 않고도 클라이언트 애플리케이션이 사용자를 나타내는 리소스와 상호작용할 수 있도록 특정 권한을 부여하는 설계를 가지고 있습니다.
주로 웹 환경에서 사용되지만, OAuth 2.0의 프레임워크는 다양한 클라이언트 형태로도 확장됩니다. 여기에 브라우저 기반 앱, 서버 측 웹 애플리케이션, 네이티브 또는 모바일 애플리케이션, 상호 연결된 장치 등이 포함되며, 이러한 플랫폼에서 대리 접근을 관리하는 접근 방식을 자세히 설명합니다. OAuth 2.0은 클라이언트 애플리케이션, 사용자, 권한 부여 서버 간의 인증 프로세스를 정의하기 위해 "인증 유형"의 개념을 도입합니다. 이 인증 유형은 클라이언트 애플리케이션이 사용자의 리소스에 접근하기 위해 액세스 토큰을 얻는 방법을 결정하기 위해 사용됩니다. OAuth 2.0의 가장 일반적인 인증 유형은 다음과 같습니다
암시적 플로우는 액세스 토큰이 추가적인 권한 부여 코드 교환 단계 없이 리다이렉트 URI에 직접 클라이언트로 반환되는 간소화된 OAuth 2.0 플로우입니다. 브라우저 제한 사항으로 인해 토큰 엔드포인트로 서버 측 요청을 할 수 없는 웹 애플리케이션을 위해 초기에 설계되었습니다.
암시적 플로우는 여러 보안 취약점을 가지고 있습니다:
이러한 보안 문제로 인해, 암시적 플로우는 현대 웹 애플리케이션에 권장되지 않습니다. 대신, PKCE(코드 교환을 위한 증명 키)를 사용하는 권한 부여 코드 플로우가 안전한 사용자 인증을 위한 선호되는 선택입니다.
반면에 권한 부여 코드 플로우는 권한 부여 프로세스를 두 단계로 분리한 보다 안전한 OAuth 2.0 플로우입니다: 클라이언트 애플리케이션은 먼저 권한 부여 서버로부터 권한 부여 코드를 받고, 그런 다음 코드를 액세스 토큰과 교환합니다. 이 플로우는 클라이언트 자격 증명을 안전하게 저장하고 액세스 토큰을 관리할 수 있는 서버 측 웹 애플리케이션을 위해 처음 설계되었습니다. PKCE 확장의 도입으로, 권한 부여 코드 플로우는 이제 브라우저 기반 애플리케이션에서도 사용할 수 있게 되었습니다.
PKCE 플로우에 대해 더 알아보세요.
| 측면 | 권한 부여 코드 플로우 | 암시적 플로우 |
|---|---|---|
| 토큰 전달 방법 | 클라이언트에게 안전한 요청을 통해 전달 | URL 프래그먼트로 직접 클라이언트에게 토큰이 전달 |
| 보안 수준 | 높음 (브라우저에서 토큰 노출 없음) | 낮음 (브라우저에서 토큰 노출) |
| 사용 사례 | 서버 측 웹 애플리케이션 및 브라우저 기반 애플리케이션 (PKCE 사용)이 포함됨 | 브라우저 기반 애플리케이션만 |
| 현대 사용 방식 | 모든 유형의 애플리케이션에 추천됨 | 추천되지 않으며 피해야 함 |
답은 YES입니다:
권한 부여 코드 플로우는 권한 부여 코드를 액세스 토큰으로 교환하는 추가 단계를 도입하여 토큰 노출 위험을 크게 줄입니다.
비즈니스에 암시적 플로우를 사용 중이라면, PKCE가 포함된 권한 부여 코드 플로우로 전환하여 당신과 사용자를 위한 더 나은 보안을 제공할 수 있습니다. 식별 시스템을 마이그레이션하고 관리하는 것이 번거롭고 비용이 많이 들 수 있다는 걸 이해하지만, 강화된 보안과 규정 준수의 이점은 충분히 그만한 가치가 있습니다.