728x90
728x90
OAuth (Open Authorization)
: 제3자 애플리케이션이 사용자의 자격 증명(예: 비밀번호) 없이 사용자의 리소스에 접근하도록 허용하는 인증 및 권한 부여 프레임워크입니다. OAuth는 특히 소셜 로그인, API 연동, 클라우드 서비스 통합 등에 널리 사용됩니다.
OAuth의 기본 개념
- 클라이언트(Client):
- 사용자의 리소스에 접근하려는 애플리케이션 (예: 타사 앱, 웹사이트).
- 리소스 소유자(Resource Owner):
- 리소스에 대한 접근 권한을 가진 사용자.
- 리소스 서버(Resource Server):
- 리소스를 호스팅하는 서버 (예: Google Drive, GitHub API).
- 권한 서버(Authorization Server):
- 리소스 서버와 분리된 서버로, 사용자의 인증을 처리하고 액세스 토큰을 발급.
- 액세스 토큰(Access Token):
- 클라이언트가 리소스 서버에 접근할 때 사용하는 임시 권한 증명.
OAuth의 주요 흐름
- 사용자 권한 요청
- 클라이언트가 리소스 소유자에게 권한을 요청.
- 사용자는 권한 부여 여부를 결정.
- 권한 코드 발급 (Authorization Code Grant)
- 사용자가 권한을 승인하면, 클라이언트는 권한 서버로부터 **권한 코드(Authorization Code)**를 받음.
- 액세스 토큰 발급
- 클라이언트는 권한 코드를 권한 서버에 전송하여 액세스 토큰을 요청.
- 권한 서버는 인증 후 액세스 토큰을 발급.
- 리소스 요청
- 클라이언트는 액세스 토큰을 사용하여 리소스 서버에 요청.
- 리소스 서버는 토큰을 검증하고 요청을 처리.
OAuth 2.0의 권한 부여 방식
OAuth 2.0은 다양한 상황에 맞게 **4가지 권한 부여 방식(Grant Type)**을 제공합니다.
- Authorization Code Grant
- 사용 사례: 웹 애플리케이션.
- 가장 보안성이 높은 방식으로, 클라이언트는 권한 코드를 통해 액세스 토큰을 발급받음.
- 사용자가 클라이언트 애플리케이션에서 로그인.
- 권한 서버에서 사용자 인증 및 권한 부여 코드 발급.
- 클라이언트는 권한 코드를 권한 서버로 보내고, 액세스 토큰을 발급받음.
- Implicit Grant
- 사용 사례: SPA(Single Page Application) 등 클라이언트 측에서만 실행되는 애플리케이션.
- 액세스 토큰이 권한 코드 없이 브라우저에 직접 전달.
- Resource Owner Password Credentials Grant
- 사용 사례: 신뢰할 수 있는 애플리케이션.
- 사용자가 자신의 자격 증명(아이디와 비밀번호)을 직접 클라이언트에 입력하여 토큰 발급.
- Client Credentials Grant
- 사용 사례: 서버 간 통신(API 호출 등).
- 사용자 인증 없이 클라이언트 애플리케이션 자체가 리소스에 접근.
OAuth와 OpenID Connect (OIDC)
OAuth는 권한 부여를 위한 프레임워크입니다.
OpenID Connect (OIDC)는 OAuth 2.0 위에 인증(Authentication) 기능을 추가한 프로토콜로, 사용자가 누구인지 확인하는 데 중점을 둡니다.
차이점
| 특징 | OAuth 2.0 | OpenID Connect |
| 목적 | 권한 부여 (Authorization) | 인증(Authentication) |
| 결과물 | 액세스 토큰(Access Token) | ID 토큰(ID Token) |
| 사용 사례 | API 호출, 리소스 접근 | 로그인 및 사용자 식별 |
OAuth의 장점
- 보안성:
- 사용자 비밀번호를 타사 애플리케이션에 노출하지 않고 인증 및 권한 부여 가능.
- 유연성:
- 다양한 애플리케이션 환경(웹, 모바일, 서버 간 통신 등)에 적용 가능.
- 확장성:
- 여러 서비스 간에 권한 부여를 표준화하여 확장 가능.
- 사용자 편의:
- 소셜 로그인(예: Google, Facebook) 등을 통해 사용자 경험 개선.
OAuth의 단점
- 구현 복잡성:
- 인증 흐름과 보안을 올바르게 설계하는 데 많은 노력 필요.
- 액세스 토큰 유출 가능성:
- 토큰 유출 시 악의적인 사용자가 리소스에 접근할 수 있음.
- 권한 부여 서버 의존성:
- 권한 서버가 작동하지 않으면 전체 인증 시스템에 문제가 발생할 수 있음.
OAuth 사용 사례
- 소셜 로그인
- 사용자는 Google, Facebook 등의 계정을 통해 로그인.
- 클라이언트 애플리케이션은 사용자의 리소스에 접근.
- API 통합
- 외부 서비스(GitHub, Stripe 등)와 애플리케이션 간의 데이터 교환.
- 클라우드 서비스
- 한 서비스에서 다른 서비스로 파일 업로드(Google Drive → Dropbox).
- 모바일 애플리케이션
- 사용자가 앱에서 리소스에 접근하도록 인증 및 권한 부여.
OAuth 보안 팁
- HTTPS 사용
- 데이터 전송 중 도청 방지.
- 짧은 액세스 토큰 수명
- 액세스 토큰이 짧게 유지되도록 설정하여 유출 시 피해를 최소화.
- 리프레시 토큰 사용
- 액세스 토큰이 만료되면 리프레시 토큰으로 새 토큰 발급.
- 범위(Scope) 제한
- 토큰이 특정 작업이나 리소스에만 접근할 수 있도록 범위를 제한.
- PKCE(Proof Key for Code Exchange)
- SPA와 같은 클라이언트에서 권한 코드가 도난당하는 것을 방지.
OAuth는 현대 웹과 모바일 애플리케이션의 인증 및 권한 부여의 표준으로 자리 잡았습니다. 올바르게 설계하고 구현하면 보안성과 사용자 편의성을 모두 만족시킬 수 있습니다. 😊
728x90
728x90
'취준 > CS 기술면접 준비' 카테고리의 다른 글
| ORM(Object-Relational Mapping) (0) | 2025.01.06 |
|---|---|
| 라이브러리(Library)와 프레임워크(Framework) 차이 (2) | 2025.01.05 |
| 로컬 스토리지(Local Storage)와 세션 스토리지(Session Storage) 차이 (0) | 2025.01.05 |
| JWT (JSON Web Token) (0) | 2025.01.05 |
| 쿠키(Cookie)와 세션(Session) (3) | 2025.01.05 |
댓글