
구글이나 애플 등의 외부 소셜 계정을 기반으로 간편히 회원가입 및 로그인 할 수 있는 웹 어플리케이션들이 있는데,
웹 어플리케이션에서 구글 등이 제공하는 기능을 간편하게 사용할 수 있다는 장점이 있다.
예를 들어 Google로 로그인하면 API를 통해 연동된 계정의 Google Calendar 정보를 가져와 사용자에게 보여줄 수 있다.
이때 사용되는 프로토콜이 OAuth다
OAuth
인증 및 권한 부여를 위한 표준 프로콜롤로서, 사용자 정보에 대한 액세스를 제어하고 사용자가 다른 웹 애플리케이션이나 서비스에 로그인할 때 안전하게 권한을 부여하는데 사용

사용자(Resource Owner)가 로그인 요청
Client(애플리케이션 서버)는 OAuth 프로세스를 시작하기 위해 사용자의 브라우저를 Authorization Server(인증 서버)로 보낸다.
클라이언트는 이때 인증 URL에 response_type, client_id, redirect_uri, scope 등의 매개변수를 쿼리스트링으로 포함하여 보낸다.
Client 로부터 Authorization URL로 이동된 Resource Owner는 제공된 로그인 페이지에서 ID/PW을 입력하여 인증
Authorization URL에서 인증이 성공했다면, Authorization server는 기존에 설정한 Redirect URL에 Authorization Code 를 포함하여 사용자를 리다이렉션
Client는 다시 Authorization Server에 Authorization Code를 전달하고, Access Token을 발급받습니다.
Client는 자신이 발급받은 Resource Owner의 Access Token을 데이터베이스에 저장하고, 이후 Resource Server에서 Resource Owner의 리소스에 접근하기 위해 Access Token을 사용합니다
Access Token은 절대 유출되서는 안됩니다
위 과정을 모두 성공적으로 마치면 Client는 Resource Owner에게 로그인이 성공하였음을 알립니다.
이제 Access Token을 가지고 접근 가능한 Resource 에 접근할 수 있습니다
이제 Access Token을 발급 받았기 때문에 정해진 Scope 내에서 다양한 리소스를 이용 할 수 있습니다
처음 로그인 요청시 scope를 정할 수 있다.
스코프란 Client가 사용 가능한 Resource의 접근 범위를 제한하는 것
예를 들어, 구글 플랫폼을 리소스 서버로 사용할 때, 사용자의 연락처를 받아오고 싶다면, scope에 연락처 scope 문자열을 포함하여 서버에 요청한다.
이러한 방식으로 발급된 액세서 토큰은 스코프 정보를 가지고 있어 권한을 제한한다.