OAuth

OAuth는 인터넷 사용자가 비밀번호를 공유하지 않고도 다른 웹사이트 상의 자신의 정보에 대한 접근 권한을 안전하게 다른 애플리케이션에 부여할 수 있게 해주는 개방형 표준이다.

쉽게 말해 신뢰 할수 없는 Third-Party프로그램에서 인증을 받는게 아니라 제 3자의 신뢰할수있는 업체(카카오, 네이버, 구글 등)으로 부터 API를 제공받아 인증와 인가를 처리하는 방식이다.


OAuth의 주요 개념 및 용어

리소스 소유자(Resource Owner)

우리의 서비스를 이용하면서 구글, 페이스북 등의 플랫폼에서 리소스를 소유하고 있는 사용자이다.

OAuth에서 말하는 Resource는 사용자의 데이터나 서비스에서 사용할수 있는 기능을 의미한다. 대체로 인증과 권한 부여가 필요한 정보나 서비스로, 예를 들어 사용자의 프로필 정보, 이메일 주소, 사진, 위치 데이터 또는 API를 통해 제공되는 기타 서비스 등이 있다.


클라이언트(Client)

Resource Owner로부터 접근 권한을 부여 받아 보호된 리소스에 접근하려는 애플리케이션, 즉 우리가 사용자에게 제공하는 서비스가 될 수 있다.

클라이언트는 Resource Owner로 부터 접근 권한을 부여 받아, Auth Server로부터 액세스 토큰을 받고, 이를 사용하여 Resource Server에 접근한다.


인증 서버(Authorization Server)

Resource Owner의 인증과 클라이언트에 대한 접근 토큰을 발급을 담당하는 서버 사용자가 접근을 승인하면, 인증 서버는 클라이언트에게 권한 부여 코드나 액세스 토큰을 발급한다.


리소스 서버(Resource Sever)

보호된 리소스를 호스팅하는 서버로, 주요 역할은 클라이언트 애플리케이션이 요청하는 리소스에 대한 접근을 제어하는 것이다.

클라이언트가 요청시 액세스 토큰을 검증하여, 해당 토큰이 유효하고, 요청된 리소스에 대한 접근 권한이 있는지 확인을 한다.


! 실제 구현 에서는 인증 서버와 리소스 서버는 동일한 시스템 내에 있을 수도 있고, 별도의 시스템으로 구성될 수도 있다. 중요한 것은 이들이 수행하는 역할의 구분이다.

OAuth 시나리오

로그인 시도 -> AuthServer에게 권한 부여 요청 -> 권한 부여 코드(Authorization Code)발급 -> 액세스 토큰(AccessToken)요청 -> 액세스 토큰 발급 및 리소스 접근

로그인 시도

사용자(Resource Owner)가 ‘ 클라이언트를 통해 구글 계정 로그인 버튼을 클릭한다.

구글(Auth Server)에게 권한 부여 요청

클라이언트는 사용자의 브라우저를 구글(OAuth서버)의 로그인 페이지로 리다이렉션 한다.

권한 부여 코드(Authorization Code) 발급

사용자(Resource Owner)가 로그인하고 정보 접근을 승인하면 구글(OAuth 서버)은 클라이언트로 사용자를 리다이렉션 한다. 이때, URL에 권한 부여 코드가 포함되어 있다.

액세스 토큰(Access Token) 요청

클라이언트는 받은 권한 부여 코드를 사용하여 구글(OAuth 서버)에게 액세스 토큰을 요청한다. 이 요청은 클라이언트의 서버에서 수행된다.

액세스 토큰 발급 및 리소스 접근

구글(OAuth 서버)은 클라이언트의 요청을 검증한 후 액세스 토큰을 발급한다. 클라이언트는 이 액세스 토큰을 사용하여 구글의 리소스 서버에서 사용자의 정보를 요청한다.

Last updated