OAuth(Open Authorization)는 사용자가 로그인 자격 증명을 타사 애플리케이션과 공유하지 않으면서도, 타사 애플리케이션에게 다른 서비스에 존재하는 사용자의 리소스에 대한 액세스 권한을 제한적으로 부여할 수 있도록 하는 표준 인가(Authorization) 프로토콜입니다.
여기서 로그인 자격 증명이라고 하는것은 보통 ID, PW 등이 될 것이고, 타사 애플리케이션은 일반적인 웹 애플리케이션을 이야기합니다. 또한 다른 서비스에 존재하는 사용자 리소스란 보통 구글, 네이버, 페이스북 등이 보유한 사용자 정보를 말합니다.
OAuth를 사용하면 사용자로부터 ID나 PW 등 민감정보를 받을 필요 없이 구글, 네이버, 페이스북 등에 등록된 사용자 정보를 이용해 서비스를 제공 할 수 있습니다.
OAuth는 인증(Authentication) 보다는 인가(Authorization) 프로토콜에 가깝습니다. 사용자의 신원을 확인하는 것이 아니라 사용자가 리소스에 대한 액세스 권한을 부여했는지 확인합니다.
OAuth는 종합적인 인증 및 권한 부여 솔루션을 제공하기 위해 OpenID Connect와 같은 인증 프로토콜과 함께 사용되는 경우가 많습니다.
리소스 소유자(Resource Owner): 일반적으로 데이터를 소유한 사용자입니다.
클라이언트(Client): 사용자 데이터에 대한 액세스를 요청하는 타사 애플리케이션입니다.
리소스 서버(Resource Server): 리소스 소유자의 데이터를 보호하고, 호스팅하는 서버입니다.
권한 부여 서버(Authorization Server): 리소스 소유자를 인증하고, 클라이언트에 토큰을 발급하는 서버입니다.
OAuth는 기존 방식에 비해 더욱 안전하게 사용자를 인증하고 권한을 부여하는 방법입니다. 타사 애플리케이션과 비밀번호를 공유할 필요가 없으므로 피싱 공격과 비밀번호 도용의 위험이 줄어듭니다.
비밀번호 보호: OAuth를 사용하면 사용자가 타사 애플리케이션과 비밀번호를 공유할 필요가 없으므로 비밀번호 도용 및 피싱 공격의 위험이 줄어듭니다.
제한적인 접근 권한: OAuth를 사용하면 타사 애플리케이션에게 제한적으로 사용자의 리소스에 대한 액세스 권한을 부여할 수 있어 민감한 정보에 대한 무단 액세스 위험을 줄일 수 있습니다.
안전한 토큰 교환: OAuth는 보안 토큰 교환 메커니즘을 사용하여 클라이언트와 권한 부여 서버 간에 액세스 토큰이 안전하게 교환되도록 합니다.
OAuth를 이용하면 애플리케이션 사용자가 새 계정을 만들 필요가 없습니다.
사용자는 애플리케이션에게 리소스에 대한 액세스 권한을 부여하는데 동의하는 것 만으로 애플리케이션을 이용할 수 있기 때문에 매끄러운 사용자 경험을 제공하는 데 큰 도움이 됩니다.
싱글 사인 온(SSO): 사용자는 단일 로그인 자격 증명으로 여러 애플리케이션에 액세스할 수 있게 됩니다.
비밀번호 피로감 감소: 사용자가 여러 개의 비밀번호를 기억할 필요가 없으므로 비밀번호 피로도를 줄여줍니다.
매끄러운 사용자 경험: 사용자가 클릭 한 번으로 리소스에 대한 액세스 권한을 부여할 수 있도록 하여 매끄러운 사용자 환경을 제공합니다.
OAuth를 사용하면 개발자는 여러 서비스와 상호 작용할 수 있는 애플리케이션을 구축하여 보다 포괄적이고 통합된 사용자 경험을 제공할 수 있습니다.
클라이언트 등록: 클라이언트(타사 애플리케이션)가 권한 부여 서버에 등록하고 Client ID, Client Secret을 받아옵니다.
인증 요청: 클라이언트가 사용자를 권한 부여 서버로 리디렉션하여 리소스에 대한 액세스를 요청합니다.
사용자 인증: 사용자가 로그인 자격 증명을 사용하여 권한 부여 서버에 인증합니다.
권한 부여: 사용자가 리소스에 대한 액세스 권한을 승인하고 권한 부여 서버가 권한 부여 코드를 사용하여 사용자를 클라이언트로 리디렉션합니다.
액세스 토큰 요청: 클라이언트가 권한 부여 코드를 사용하여 권한 부여 서버에 액세스 토큰을 요청합니다.
액세스 토큰 응답: 권한 부여 서버는 액세스 토큰으로 응답하며, 클라이언트는 이 토큰을 사용하여 사용자의 리소스에 액세스합니다.
OAuth 스코프는 클라이언트에 액세스 권한이 있는 특정 리소스 및 작업을 정의합니다.
스코프는 클라이언트가 사용자의 리소스에 액세스할 수 있는 범위를 제한하는 데 사용됩니다.
스코프 유형: 스코프에는 읽기 전용과 읽기-쓰기의 두 가지 유형이 있습니다. 읽기 전용 스코프는 클라이언트가 사용자의 리소스를 읽을 수 있도록 허용하고, 읽기-쓰기 스코프는 클라이언트가 사용자의 리소스를 읽고 쓸 수 있도록 허용합니다.
스코프 유효성 검사: 권한 부여 서버는 클라이언트가 요청한 스코프의 유효성을 검사하여 사용자가 요청된 리소스에 대한 액세스 권한을 클라이언트에게 부여했는지 확인합니다.
OAuth 토큰은 클라이언트를 인증하고 권한을 부여하는 데 사용됩니다. 토큰에는 두 가지 유형이 있습니다:
개발자는 서비스 제공업체 또는 타사 라이브러리에서 제공하는 라이브러리 및 프레임워크를 사용하여 OAuth를 구현할 수 있습니다. 예를 들어, JavaScript용 Facebook SDK는 Facebook 인증을 위한 OAuth를 간단하게 구현할 수 있는 방법을 제공합니다.
OAuth 라이브러리: 많은 서비스 제공업체가 널리 사용되는 프로그래밍 언어용 OAuth 라이브러리를 제공하므로 애플리케이션에서 OAuth를 쉽게 구현할 수 있습니다.
타사 라이브러리: OAuth.io와 같은 타사 라이브러리는 여러 서비스 제공업체에서 OAuth를 간단하게 구현할 수 있는 방법을 제공합니다.
OAuth는 안전하고 편리한 사용자 인증 및 권한 부여 방법을 제공하여 개발자가 보다 통합적이고 포괄적인 애플리케이션을 구축할 수 있도록 지원합니다.
개발자는 OAuth 흐름, 범위 및 토큰을 이해함으로써 애플리케이션에서 OAuth를 구현하고 더 나은 사용자 경험을 제공할 수 있습니다.
OAuth 2.0 Specification
OAuth 2.0 Tutorial
Facebook SDK for JavaScript
OAuth.io
WEB-📚-OAuth-20-개념-💯-정리 [Inpa Dev 👨💻:티스토리]