
OAuth (Open Authorization)는 제3자 애플리케이션이 사용자 비밀번호를 노출하지 않고도 사용자의 리소스에 접근할 수 있도록 해주는 인증 표준입니다. OAuth는 다른 대규모 플랫폼에 인증을 위탁하고 그 인증정보를 가지고 사용자에게 인가를 해주는 방식을 취하고 있습니다. 인증을 위탁함으로써 발생할 수 있는 보안위험이나 복잡한 구현을 방지할 수 있습니다.
Google, 네이버, 카카오인증등 소셜인증이 그 예시입니다.
OAuth가 나오게 된 배경은 다음과 같은데, 보안이슈로 인해 이런 방식을 채택하게 되었습니다.
과거에는 타사 애플리케이션이 특정 서비스의 사용자 데이터에 접근하기 위해 사용자로부터 직접 그 서비스의 비밀번호를 입력받아야 했습니다. 타사 애플리케이션이 비밀번호를 악의적으로 사용할 수 있기 때문에 이는 보안상 큰 위험을 초래합니다.
사용자가 여러 서비스에서 동일한 비밀번호를 사용하는 경우, 한 서비스의 보안이 뚫리면 다른 서비스들도 연쇄적으로 위험에 노출됩니다.
사용자가 어떤 애플리케이션에 어떤 권한을 부여했는지 쉽게 관리할 수 있는 방법이 없었습니다. 권한을 철회하거나 제한하는 것이 불가능에 가까웠습니다.
OAuth는 위 문제들을 다음과 같은 방식으로 해결합니다.
OAuth는 인증의 방법으로 액세스 토큰(access token)을 사용합니다. 액세스 토큰은 특정 범위(scope)와 기간 동안 제한된 권한을 가지며, 타사 애플리케이션이 사용자의 자원을 접근할 수 있도록 합니다. 이로써 비밀번호 노출 위험을 줄일 수 있습니다.
OAuth를 사용하면 사용자는 특정 권한을 애플리케이션에 위임(delegate)할 수 있습니다. 예를 들어, 사용자는 사진 갤러리 앱이 자신의 구글 드라이브 사진 폴더에 접근하도록 권한을 줄 수 있지만, 이메일이나 캘린더에는 접근하지 못하게 할 수 있습니다.
사용자는 자신이 부여한 권한을 언제든지 철회할 수 있습니다. 이는 OAuth 제공자가 사용자에게 권한 관리 인터페이스를 제공하기 때문입니다. 사용자는 어떤 애플리케이션이 자신의 데이터에 접근하고 있는지 확인하고, 필요시 이를 철회할 수 있습니다.
OAuth의 인증과 자원할당 과정은 보통 다음과 같은 단계로 이루어집니다.
사용자가 애플리케이션을 통해 특정 서비스에 접근하려고 할 때, 애플리케이션은 사용자에게 권한 요청 화면을 보여줍니다.
사용자가 권한 요청을 승인하면, 서비스 제공자는 승인 코드를 애플리케이션에 전달합니다.
애플리케이션은 승인 코드를 사용하여 서비스 제공자로부터 액세스 토큰을 요청합니다. 이 과정에서 애플리케이션은 자신의 클라이언트 ID와 시크릿을 함께 전송하여 자신을 인증합니다.
서비스 제공자는 요청이 올바른 경우 액세스 토큰을 발급하여 애플리케이션에 전달합니다.
: 액세스 토큰 발급과정
애플리케이션은 발급받은 액세스 토큰을 사용하여 사용자 자원에 접근합니다.
: 토큰 발급 이후에 자원접근 과정
OAuth는 비밀번호 노출 위험을 줄이고, 사용자에게 권한 관리를 쉽게 할 수 있는 방법을 제공하며, 애플리케이션 개발자에게도 안전하고 효율적인 사용자 데이터 접근 방법을 제공힙니다. 이러한 이유로 많은 인터넷 서비스가 OAuth를 채택하고 있습니다.
OAuth 개념 및 동작 방식 이해하기
Authorizing OAuth apps
생활코딩 OAuth
OAuth 2.0 Explore OAuth 2.0. What is it and how can you best implement it?
[OAuth 2.0] OAuth란?
위키백과