OAuth(Open Authorization)는 제3자 서비스에게 사용자의 리소스 접근 권한을 위임하는 인증 및 인가 프로토콜입니다.
주로 소셜 로그인이나 API 접근 권한 부여에서 사용되며, 사용자 비밀번호를 공유하지 않고 안전하게 권한을 부여할 수 있도록 합니다.
OAuth의 핵심 개념
인증(Authentication)
- 사용자가 누구인지 확인하는 과정입니다.
인가(Authorization)
- 확인된 사용자에게 특정 리소스 접근 권한을 부여하는 과정입니다.
Access Token
- 인가가 완료된 후 제공되는 권한 부여 토큰입니다. 이 토큰을 통해 제3자 서비스가 사용자의 리소스에 접근합니다.
Resource Owner (리소스 소유자)
- 데이터를 소유한 사용자. 예: 사용자의 계정 정보.
Client (클라이언트)
- 리소스 소유자로부터 접근 권한을 위임받고 리소스를 요청하는 제3자 애플리케이션.
Authorization Server (인가 서버)
- 사용자 인증을 수행하고, 접근 권한(Access Token)을 발급하는 서버.
Resource Server (리소스 서버)
- 사용자 데이터를 제공하는 서버. 예: Google의 사용자 정보, Facebook의 프로필 사진.
OAuth 동작 방식 (예시: 소셜 로그인)
사용자 요청
- 사용자가 클라이언트 애플리케이션(예: 웹사이트)에서 소셜 로그인 버튼을 클릭합니다.
Authorization 요청
- 클라이언트 애플리케이션은 사용자를 Authorization Server(예: Google, Facebook)로 리디렉션합니다.
사용자 인증 및 권한 부여
- 사용자는 Authorization Server에서 자신의 계정으로 로그인하고 권한 부여를 승인합니다.
Access Token 발급
- Authorization Server는 클라이언트 애플리케이션에게 Access Token을 발급합니다.
Resource Server에 요청
- 클라이언트 애플리케이션은 Access Token을 사용해 Resource Server에 사용자 정보를 요청합니다.
리소스 반환
- Resource Server는 Access Token이 유효하면 사용자 데이터를 반환합니다.
OAuth의 흐름: 권한 부여 방식
1. Authorization Code Grant (권한 코드 방식)
가장 많이 사용되는 방식입니다. 보안이 뛰어나다는 장점이 있습니다.
- 동작 원리:
- 사용자가 인증 및 권한 부여를 승인하면 Authorization Code를 받습니다.
- 클라이언트는 Authorization Code를 사용해 Access Token을 발급받습니다.
2. Client Credentials Grant
서버 간 통신에서 사용됩니다. 사용자 인증이 필요 없는 경우에 사용됩니다.
3. Resource Owner Password Credentials Grant
사용자가 아이디와 비밀번호를 클라이언트에게 직접 입력하는 방식입니다.
- 보안성이 낮아 거의 사용되지 않습니다.
4. Implicit Grant (Deprecated)
브라우저 기반 애플리케이션에서 사용되었지만 보안 이슈로 이제는 권장되지 않습니다.
OAuth 2.0과 OAuth 1.0의 차이
구분 | OAuth 1.0 | OAuth 2.0 |
---|---|---|
보안성 | 복잡한 서명(Signature) 사용 | Access Token과 HTTPS 기반으로 개선 |
단순성 | 상대적으로 복잡 | 더 간단하고 효율적인 구조 |
토큰 타입 | 액세스 토큰과 요청 토큰 구분 | Access Token 중심 |
호환성 | 제한적 | 모바일, 웹 등 다양한 환경에서 사용 가능 |
OAuth 사용 사례
소셜 로그인
- 사용자가 Google, Facebook, Naver, Kakao 계정으로 로그인할 수 있습니다.
API 접근 권한 부여
- 애플리케이션이 사용자의 리소스(예: Google Drive, GitHub 파일)에 접근할 때 OAuth를 통해 인증합니다.
외부 서비스와의 연동
- Slack, Jira 같은 서비스에서 외부 플러그인을 설치할 때도 OAuth를 사용합니다.
결론
✅ OAuth는 사용자의 인증과 인가를 안전하게 위임하는 프로토콜입니다.
✅ Access Token을 통해 사용자 비밀번호를 공유하지 않고 리소스에 접근할 수 있습니다.
✅ 주요 사용 사례: 소셜 로그인, API 접근 권한 부여, 외부 서비스 연동.
'OAuth' 카테고리의 다른 글
OAuth 2.0 액세스 토큰 발급 방법 (0) | 2024.12.17 |
---|---|
Spring Authorization Server 구성 (0) | 2024.12.17 |
Authorization Code (0) | 2024.12.17 |
Proof Key(PKCE) (0) | 2024.12.17 |
투명 토큰(Transparent Token)과 불투명 토큰(Opaque Token) (1) | 2024.12.17 |