반응형
OAuth는 오픈 스탠다드 인증 프로토콜입니다. 사용자가 중요한 자원(ex: 비밀번호)을 공유하지 않고도, 한 서비스(서비스 제공자)가 다른 서비스(소비자 서비스)에게 사용자 대신 특정 자원에 접근할 수 있는 권한을 부여할 수 있게 해 줍니다. 주로 API를 통한 서비스 간의 안전한 인증과 권한 부여에 사용됩니다.
개념
- 리소스 오너(Resource Owner): 사용자를 의미합니다. 사용자는 데이터에 접근할 수 있는 권한을 부여할 수 있습니다.
- 클라이언트(Client): 사용자 대신 특정 자원에 접근하려는 애플리케이션을 의미합니다.
- 리소스 서버(Resource Server): 사용자 데이터를 보유하고 있는 서버입니다. 클라이언트가 접근하려고 하는 자원을 관리합니다.
- 인증 서버(Authorization Server): 클라이언트에게 접근 권한을 발급해 주는 서버입니다. 리소스 서버와 같을 수도 있고, 별도의 서비스일 수 있습니다.
특징
- 보안성: 사용자는 자신의 로그인 정보를 제3자에게 직접 제공하지 않아도 됩니다. 대신, 토큰 기반 시스템을 사용하여 제3자 애플리케이션에게 제한된 접근만을 허용합니다.
- 유연성과 확장성: 다양한 유형의 애플리케이션(웹, 모바일, IoT 디바이스 등)에서 사용될 수 있으며, 다양한 인증 수준과 권한을 제공할 수 있습니다.
- 표준화: OAuth는 인터넷 엔지니어링 태스크 포스(IETF)에 의해 표준화되었습니다. 이로 인해 다양한 서비스와 애플리케이션 간의 호환성이 보장됩니다.
작동 프로세스
- 권한 요청(Authorization Request): 클라이언트 애플리케이션은 사용자를 인증 서버의 로그인 페이지로 리디렉션 합니다. 이 페이지에서 사용자는 로그인을 하고, 클라이언트가 자신의 데이터에 접근할 수 있는 권한을 부여합니다.
- 권한 부여(Authorization Grant): 사용자가 권한을 부여하면, 인증 서버는 클라이언트에게 권한 부여 코드(Authorization Code)를 발급합니다. 이 코드는 클라이언트가 엑세스 토큰을 요청하는 데 사용됩니다.
- 엑세스 토큰 요청(Access Token Request): 클라이언트는 권한 부여 코드와 클라이언트의 인증 정보를 인증 서버에 제출하며, 엑세스 토큰을 요청합니다.
- 엑세스 토큰 발급(Access Token Response): 인증 서버는 클라이언트의 요청을 검증하고, 유효하다면 엑세스 토큰(및 선택적으로 리프레시 토큰)을 발급합니다. 엑세스 토큰은 리소스 서버에 접근할 때 사용됩니다.
- 리소스 요청(Resource Request): 클라이언트는 엑세스 토큰을 사용하여 리소스 서버에 접근하고, 사용자 데이터에 대한 요청을 합니다.
- 리소스 응답(Resource Response): 리소스 서버는 클라이언트의 엑세스 토큰을 검증하고, 요청이 유효하다면 요청된 데이터를 클라이언트에게 제공합니다.
더보기
OAuth 2.0은 또한 다양한 권한 부여 유형(Authorization Grant Types)을 지원합니다. 이에는 다음과 같은 것들이 포함됩니다.
- Authorization Code: 웹 애플리케이션용으로 설계되었습니다.
- Implicit: 클라이언트 사이드 애플리케이션(ex: SPA)에 사용됩니다.
- Resource Owner Password Credentials: 사용자 이름과 비밀번호를 직접 입력해야 하는 시나리오에 사용됩니다.
- Client Credentials: 클라이언트가 자신의 리소스에 접근할 때 사용됩니다.
사용 사례
1. 소셜 로그인
- 소셜 미디어 로그인 기능은 웹 사이트나 애플리케이션에서 매우 흔히 볼 수 있는 OAuth의 대표적인 사용 사례입니다. 사용자는 Facebook, Google, Twitter 등 자신이 이미 계정을 가지고 있는 소셜 미디어 서비스를 통해 다른 웹 사이트나 애플리케이션에 로그인할 수 있습니다. 이를 통해 사용자는 별도의 계정을 만들지 않고도 서비스를 이용할 수 있으며, 서비스 제공자는 사용자의 기본적인 프로필 정보를 쉽게 가져올 수 있습니다.
2. 데이터 공유
- 다양한 온라인 서비스들이 사용자의 데이터를 안전하게 공유할 수 있도록 OAuth를 사용합니다. 예를 들어, 피트니스 앱이 Google Fit이나 Apple Health와 같은 건강 관리 서비스로부터 운동 및 건강 데이터를 가져오거나, 반대로 데이터를 전송할 때 OAuth를 사용할 수 있습니다. 이를 통해 사용자는 여러 서비스 간에 자신의 데이터를 원활하게 연동하여 사용할 수 있습니다.
3. 제3자 애플리케이션 접근 제어
- 사용자가 특정 서비스의 데이터나 기능에 대한 접근 권한을 제3자 애플리케이션에 부여할 수 있도록 OAuth를 사용합니다. 예를 들어, 사용자가 자신의 이메일 계정에 접근할 수 있는 권한을 이메일 관리 앱에 부여하거나, 소셜 미디어 관리 도구가 사용자의 소셜 미디어 계정을 대신하여 게시물을 올릴 수 있도록 설정할 때 OAuth가 사용됩니다. 이 경우 OAuth는 사용자가 제3자 앱에 자신의 로그인 정보를 직접 공개하지 않고도 필요한 권한을 부여할 수 있게 해 줍니다.
4. 클라우드 서비스 통합
- 기업이나 개발자들이 클라우드 기반 서비스를 통합할 때 OAuth를 사용할 수 있습니다. 예를 들어, 클라우드 스토리지 서비스에 파일을 저장하거나, 클라우드 기반 CRM(Customer Relationship Management) 시스템에 접근하는 등의 경우에 OAuth를 통해 안전하게 인증 및 권한 부여를 수행할 수 있습니다.
5. 스마트 디바이스
- IoT(Internet of Things) 디바이스나 스마트 홈 장치들이 사용자의 계정 정보에 안전하게 접근할 수 있도록 OAuth가 사용될 수 있습니다. 예를 들어, 스마트 스피커가 사용자의 음악 스트리밍 서비스 계정에 접근하여 음악을 재생하거나, 스마트 홈 카메라가 클라우드 스토리지 서비스에 비디오를 저장할 때 OAuth를 활용할 수 있습니다.
오늘은 OAuth에 대해서 알아보았습니다.
보안 관련 KeyCloak에 대한 내용도 함께 보시면 좋습니다!
2024.04.05 - [IT] - [키클록] KeyCloak란? (개념, 특징, 장단점, OpenID Connect)
반응형
'IT' 카테고리의 다른 글
[Web] 웹 소켓(Web Socket)란? (특징, 동작 과정, 사용 사례, 롱 폴링(LongPolling)과 차이점) (0) | 2024.04.10 |
---|---|
[기술 면접] CS 기술 면접 질문&답변 (0) | 2024.04.09 |
[키클록] KeyCloak란? (개념, 특징, 장단점, OpenID Connect) (0) | 2024.04.05 |
[서버] Nginx란? (개념, 특징, 장단점, 면접 대비) (0) | 2024.04.04 |
[JAVA] 자바란? (개념, 특징, 장단점, 면접 대비) (0) | 2024.04.03 |