⭐️ OAuth2.0 이란?
OAuth 2.0은 인증 및 인가 프레임워크로서, 클라이언트 애플리케이션이 인증된 사용자의 리소스에 접근할 수 있도록 하는 프로토콜입니다. 주로 웹 및 모바일 애플리케이션에서 사용되며, 다음과 같은 핵심 요소로 구성됩니다:
- 역할: OAuth 2.0은 사용자(리소스 소유자), 클라이언트 애플리케이션, 리소스 서버, 인증 서버 간의 상호작용을 통해 리소스 접근을 관리합니다.
- 인증: 클라이언트 애플리케이션이 사용자를 대신하여 리소스에 접근할 수 있는 권한을 얻기 위해 인증 서버와 상호작용합니다.
- 토큰: 인증이 성공적으로 완료되면 클라이언트에게 액세스 토큰이 제공됩니다. 이 토큰은 리소스 서버에 제출되어 사용자의 리소스에 대한 요청을 인가합니다.
- 인가: 액세스 토큰을 사용하여 클라이언트가 요청하는 리소스에 대한 권한을 부여받습니다.
OAuth 2.0의 핵심 흐름은 다음과 같습니다:
- 클라이언트 애플리케이션은 인증 코드를 얻기 위해 인증 서버에 요청을 보냅니다.
- 사용자는 인증 서버에서 로그인하고 권한을 부여합니다.
- 인증 서버는 인증 코드를 클라이언트에게 반환합니다.
- 클라이언트는 인증 코드를 사용하여 액세스 토큰을 요청합니다.
- 인증 서버는 클라이언트에게 액세스 토큰을 제공합니다.
- 클라이언트는 액세스 토큰을 사용하여 보호된 리소스에 접근합니다.
정리:
OAuth 2.0은 클라이언트 애플리케이션이 사용자의 데이터에 접근할 수 있는 권한을 안전하게 관리하는 역할을 합니다.
사용자는 자신의 자격 증명을 직접 공유하지 않고도 다양한 서비스 및 애플리케이션 간에 데이터를 공유할 수 있습니다.
OAuth 2.0은 표준화되어 있어서 다양한 플랫폼 및 언어에서 지원되며, 보안과 사용자 편의성을 동시에 제공합니다.
⭐️ OAuth 2.0 흐름

- 클라이언트: 앱이라고도 합니다. 휴대기기 또는 기존 웹 앱에서 실행되는 앱일 수 있습니다. 앱은 리소스 소유자를 대신하여 보호된 애셋에 대해 리소스 서버에 요청을 보냅니다. 리소스 소유자는 보호된 리소스에 액세스할 수 있는 권한을 앱에 부여해야 합니다.
- 리소스 소유자: 최종 사용자라고도 합니다. 일반적으로 보호 대상 리소스에 대한 액세스 권한을 부여할 수 있는 사람(또는 다른 주체)입니다. 예를 들어 앱이 소셜 미디어 사이트 중 하나의 데이터를 사용해야 하는 경우 리소스 소유자만이 데이터에 대한 액세스 권한을 앱에 부여할 수 있습니다.
- 리소스 서버: 리소스 서버는 Facebook, Google 또는 Twitter와 같은 서비스, 인트라넷의 HR 서비스 또는 B2B 엑스트라넷의 파트너 서비스라고 생각하면 됩니다. Apigee는 OAuth 토큰 검증이 필요할 때마다 API 요청을 처리하는 리소스 서버입니다. 리소스 서버는 보호된 리소스를 앱에 제공하기 전에 일종의 승인을 요구합니다.
- 승인 서버: 승인 서버는 OAuth 2.0 사양을 준수하여 구현되며, 승인 부여 검증 및 리소스 서버에서 사용자 데이터에 액세스할 수 있는 권한을 앱에 부여하는 액세스 토큰 발급을 담당합니다. Apigee에서 토큰 엔드포인트를 구성할 수 있습니다. 이 경우 Apigee가 승인 서버의 역할을 수행합니다.
- 승인 부여: 최종 사용자를 대신하여 액세스 토큰을 검색할 수 있는 권한을 앱에 부여합니다. OAuth 2.0은 4가지 구체적인 '부여 유형'을 정의합니다.
- 액세스 토큰: 보호된 리소스에 액세스하는 데 사용되는 사용자 인증 정보 역할을 하는 긴 문자열입니다.
- 보호된 리소스: 리소스 소유자가 소유한 데이터입니다. 예를 들면 사용자의 연락처 목록, 계정 정보, 기타 민감한 정보가 있습니다.
⭐️ 액세스 토큰과 사용법
액세스 토큰 사용법
- 액세스 토큰 획득: 클라이언트 애플리케이션은 인증 서버에서 인증 코드를 받은 후, 이를 사용하여 액세스 토큰을 요청합니다.
- 액세스 토큰 보관: 클라이언트 애플리케이션은 받은 액세스 토큰을 안전하게 저장합니다. 일반적으로 메모리에 저장하거나, 안전한 데이터 저장소에 저장합니다.
- 액세스 토큰 사용: 클라이언트는 보호된 리소스에 접근할 때, HTTP 요청의 헤더나 요청 매개변수에 액세스 토큰을 포함시켜 보냅니다.
- 리소스 서버의 검증: 리소스 서버는 클라이언트가 보낸 요청에 포함된 액세스 토큰을 받아서, 유효성을 검사합니다.
- 액세스 권한 부여: 유효한 액세스 토큰을 받은 리소스 서버는 요청된 작업을 수행하고, 클라이언트에게 요청한 데이터나 서비스를 제공합니다.
액세스 토큰의 특징
- 유효 기간: 액세스 토큰은 일정 기간 동안 유효합니다. 만료되면 재발급이 필요합니다.
- 범위: 액세스 토큰에는 접근할 수 있는 리소스의 범위(스코프)가 정의될 수 있습니다. 예를 들어, 프로필 정보에 대한 접근만을 허용할 수 있습니다.
- 보안: 액세스 토큰은 HTTPS를 통해 안전하게 전송되어야 하며, 클라이언트는 토큰을 안전하게 저장하고 관리해야 합니다.
사용법
GET /api/resource HTTP/1.1
Host: example.com
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
⭐️구글 OAuth2.0 API
- 프로젝트 등록: 구글 OAuth 2.0을 사용하려면 먼저 Google Developers Console에서 프로젝트를 등록해야 합니다. 프로젝트 등록 후에는 해당 프로젝트에서 OAuth 2.0 클라이언트 ID를 생성할 수 있습니다.
- OAuth 2.0 클라이언트 ID 생성: 클라이언트 애플리케이션이 OAuth 2.0을 통해 인증을 요청할 때 필요한 클라이언트 ID와 클라이언트 시크릿을 생성해야 합니다. 이 정보는 클라이언트 애플리케이션에서 인증 서버에 제출됩니다.
- 리다이렉션 URI 설정: OAuth 2.0 인증 코드를 받기 위해 사용자가 리디렉션되는 URI를 정확하게 설정해야 합니다. 이는 Google Developers Console에서 클라이언트 ID를 생성할 때 설정할 수 있습니다.
- 스코프 설정: 액세스 토큰을 요청할 때 접근할 수 있는 리소스의 범위를 정의하는 것입니다. 구글 OAuth 2.0 API를 사용할 때 필요한 스코프를 설정해야 합니다. 예를 들어, 프로필 정보에 대한 접근 권한을 요청할 수 있습니다.
https://cloud.google.com/apigee/docs/api-platform/security/oauth/oauth-introduction?hl=ko