728x90
반응형
OAuth 2.0은 사용자가 비밀번호를 제공하지 않고도 애플리케이션이 사용자 데이터를 안전하게 접근할 수 있도록 허용하는 업계 표준 인증 프로토콜이다.
이는 사용자, 애플리케이션(클라이언트), 인증 서버, 자원 서버 간의 상호 작용을 통해 이루어지며, 주로 API 액세스를 제어하는 데 사용된다.
주요 개념 및 역할
- Resource Owner (자원 소유자):
- 보통은 사용자(User)로, 자신의 자원(예: Google Drive 파일, Facebook 프로필 정보 등)에 대한 접근 권한을 가지고 있다.
- Client (클라이언트):
- 자원 소유자가 접근을 허용한 애플리케이션이나 서비스이다. 클라이언트는 자원 서버에서 자원 소유자의 데이터를 요청한다.
- Authorization Server (인증 서버):
- 자원 소유자를 인증하고, 클라이언트가 요청할 수 있는 액세스 토큰을 발급하는 서버이다. 예를 들어, Google의 OAuth 서버는 인증 서버 역할을 한다.
- Resource Server (자원 서버):
- 클라이언트가 접근하려는 데이터를 실제로 호스팅하는 서버이다. 인증 서버가 발급한 액세스 토큰을 받아 클라이언트의 요청을 허용한다. 예를 들어, Google Drive의 파일이 자원 서버에 저장되어 있다.
OAuth 2.0의 동작 방식
OAuth 2.0은 주로 다음 네 가지 승인 방식(grant type)을 통해 동작한다.
- Authorization Code Grant:
- 흐름: 가장 일반적으로 사용되는 방식으로, 사용자가 클라이언트 애플리케이션에서 인증 서버로 리디렉션된 후 인증을 완료하면, 클라이언트는 인증 서버로부터 Authorization Code를 받고, 이를 사용하여 액세스 토큰을 요청한다.
- 장점: 액세스 토큰이 클라이언트 애플리케이션에서 직접 사용자에게 노출되지 않아 보안성이 높다.
- 사용 예: 웹 애플리케이션
- Implicit Grant:
- 흐름: Authorization Code Grant와 유사하지만, Authorization Code 없이 바로 액세스 토큰을 발급받는다. 브라우저 기반 애플리케이션에서 주로 사용된다.
- 단점: 액세스 토큰이 브라우저 URL에 포함되므로 보안에 취약할 수 있다.
- 사용 예: SPA(Single Page Application)와 같은 클라이언트 측 애플리케이션
- Resource Owner Password Credentials Grant:
- 흐름: 사용자가 클라이언트 애플리케이션에 자신의 사용자 이름과 비밀번호를 직접 제공하여 인증을 완료한다. 이후 클라이언트가 인증 서버로부터 액세스 토큰을 받다.
- 단점: 보안성이 낮아 신뢰할 수 있는 클라이언트에서만 사용된다.
- 사용 예: 제한적인 상황에서 모바일 애플리케이션이나 신뢰할 수 있는 내부 시스템
- Client Credentials Grant:
- 흐름: 클라이언트가 자원 소유자를 대신하지 않고 자신의 자격 증명을 사용하여 직접 인증 서버로부터 액세스 토큰을 받는다.
- 사용 예: 서버 간 통신 또는 백그라운드 프로세스에서 사용
액세스 토큰과 리프레시 토큰
- Access Token (액세스 토큰): 인증 서버에서 발급하며, 자원 서버에 접근할 때 사용하는 토큰이다. 일정 시간이 지나면 만료된다.
- Refresh Token (리프레시 토큰): 액세스 토큰이 만료되었을 때, 새로운 액세스 토큰을 발급받기 위해 사용된다. 리프레시 토큰은 더 긴 수명을 가지며, 액세스 토큰을 갱신하는 데 사용된다.
OAuth 2.0의 보안
OAuth 2.0은 보안 문제를 해결하기 위해 다음과 같은 방법을 사용한다.
- HTTPS 사용: 모든 통신이 HTTPS를 통해 암호화된다.
- 토큰 만료: 액세스 토큰은 일정 기간 후 만료되며, 리프레시 토큰을 통해 갱신할 수 있다.
- 동의 화면: 사용자는 클라이언트가 접근할 수 있는 자원 범위를 직접 선택할 수 있다.
OAuth 2.0의 장점과 단점
- 장점:
- 여러 애플리케이션에서 사용자의 인증 정보를 공유할 필요 없이 안전하게 데이터 접근을 관리할 수 있다.
- 유연한 인증 흐름을 지원하여 다양한 애플리케이션 환경에 적용할 수 있다.
- 단점:
- 설정과 구현이 복잡할 수 있으며, 특히 보안 관련 문제를 올바르게 처리해야 한다.
- 추가적인 보안 메커니즘(Such as PKCE)이 필요한 경우가 있다.
OAuth 2.0은 현재 많은 웹 서비스와 API에서 사용되는 표준이며, 특히 소셜 로그인 기능에서 자주 활용된다.
이는 사용자 경험을 개선하고, 보안을 유지하면서도 데이터에 쉽게 접근하고 관리할 수 있는 방법을 제공한다.
728x90
반응형
'ETC' 카테고리의 다른 글
[JavaScript] undefined와 null의 차이 (0) | 2024.09.22 |
---|---|
HTTP ERROR 정리 (0) | 2024.09.19 |
[ETC] OAuth 1.0과 2.0의 차이 (0) | 2024.09.09 |
[ETC] WS(Web Server)와 WAS(Web Application Server)의 차이 (2) | 2024.09.07 |
[ETC] 가독성이 좋은 코드란 무엇일까? (0) | 2024.09.04 |