OAuth 2.0 인증
OAuth 2.0은 보호된 리소스에 대한 접근을 인가하기 위한 사실상의 표준이 된 인가 프레임워크입니다. 이를 통해 서드파티 애플리케이션이 사용자의 자격 증명을 노출하지 않고 사용자 데이터에 접근할 수 있습니다. 비밀번호를 공유하는 대신 서비스가 토큰을 제공합니다.
배경
Google 계정의 데이터에 접근해야 하는 서드파티 애플리케이션을 사용하고 싶다고 상상해 보세요. 이 서드파티 앱에 Google 사용자 이름과 비밀번호를 제공하고 싶지는 않겠죠? 이때 OAuth가 등장합니다. Google 자격 증명을 공유하지 않고도 이 애플리케이션에 Google 데이터에 대한 접근 권한을 부여할 수 있게 해줍니다.
OAuth 2.0의 기본 사항
OAuth 2.0은 웹 애플리케이션, 데스크톱 애플리케이션, 모바일 폰 및 거실 기기를 위한 특정 인가 흐름을 제공하면서 클라이언트 개발자의 단순성에 중점을 둡니다. 간단한 설명은 다음과 같습니다:
리소스 소유자: 애플리케이션이 자신의 계정에 접근하도록 인가하는 사용자입니다. 사용자 계정에 대한 애플리케이션의 접근은 부여된 인가의 "범위"로 제한됩니다(예: 특정 유형의 데이터 읽기 또는 쓰기).
클라이언트: 사용자의 계정에 접근하려는 애플리케이션입니다. 이를 수행하기 전에 사용자로부터 인가를 받아야 하며, 이 인가는 API에 의해 검증되어야 합니다.
리소스 서버: 사용자 계정을 호스팅하는 서버입니다. 액세스 토큰을 사용하여 보호된 리소스 요청을 수락하고 응답할 수 있습니다.
인가 서버: 이 서버는 사용자의 신원을 확인한 다음 애플리케이션에 액세스 토큰을 발급합니다.
OAuth 2.0 흐름
다양한 유형의 애플리케이션과 사용 사례를 위한 여러 "흐름" 또는 "Grant Type"이 있습니다:
Authorization Code (웹 서버에서 실행되는 앱용): 가장 일반적인 흐름으로, 특히 웹 앱에 적합합니다. 사용자를 서비스로 리다이렉트하여 로그인하게 합니다. 로그인 후 인가 코드와 함께 애플리케이션으로 다시 리다이렉트되며, 애플리케이션은 이 코드를 액세스 토큰으로 교환할 수 있습니다.
Implicit (브라우저에서 실행되는 앱용): 이 흐름은 사용자 에이전트 기반 앱(예: 싱글 페이지 앱)을 위한 것으로, 추가 인가 코드 교환 단계 없이 액세스 토큰이 즉시 반환됩니다.
Resource Owner Password Credentials: 이 흐름은 애플리케이션이 사용자의 사용자 이름과 비밀번호를 직접 제공할 수 있게 합니다. 사용자의 자격 증명 공유가 포함되므로 신뢰할 수 있는 애플리케이션에만 권장됩니다.
Client Credentials: 클라이언트 자체가 리소스 소유자인 경우에 사용됩니다. 예를 들어, 클라이언트가 백그라운드 서비스인 경우입니다.
토큰
사용자의 자격 증명을 사용하는 대신, OAuth 2.0은 토큰을 사용합니다. 두 가지 유형이 있습니다:
액세스 토큰: 애플리케이션이 사용자를 대신하여 API 요청을 할 수 있게 합니다. 수명이 짧습니다.
리프레시 토큰: 원래 액세스 토큰이 만료된 경우 새 액세스 토큰을 얻는 데 사용할 수 있습니다. 액세스 토큰보다 수명이 깁니다.
보안
OAuth 2.0은 보안을 위해 SSL/TLS에 의존합니다. 클라이언트, 인가 서버 및 리소스 서버 간의 데이터 기밀성을 보장합니다. 공격자가 액세스 토큰을 가로채더라도, 만료(일반적으로 짧은 기간) 이후 또는 발급된 범위 외에서는 사용할 수 없습니다.
결론
OAuth 2.0은 사용자 자격 증명을 노출하지 않고 서드파티 애플리케이션이 사용자 데이터에 접근할 수 있게 하는 강력하고 유연한 프레임워크입니다. 현대 웹에서 필수적인 도구가 되어, 다양한 서비스와 애플리케이션에 걸쳐 권한을 부여하고 관리하는 안전하고 효율적인 수단을 사용자와 개발자에게 제공합니다.