[spring(스프링)] OAuth란? _디버깅의 눈물
OAuth(Open Authorization)란?
사용자 인증 및 권한 부여를 위한 프레임워크입니다.
인터넷 사용자들이 비밀번호를 제공하지 않고, 다른 웹사이트(구글, 페이스북, 카카오 등) 상의 자신들의 정보에 대해, 제3자 웹 사이트나 애플리케이션의 접근 권한을 부여할 수 있는 기능을 합니다.
즉, OAuth는 제3자 애플리케이션(Client)에 대한 권한 부여를 안전하게 수행하는데 중점을 둡니다.
OAuth의 인증 절차

(1)사용자가 클라이언트 애플리케이션에 소셜 연동 로그인(카카오, 네이버 등)을 요청합니다.
(2)클라이언트는 인증 서버에 사용자 인증을 요청합니다.
(3)인증 서버는 사용자에게 소셜 로그인 페이지를 제공합니다.
(4)사용자는 소셜 로그인 페이지에 사용자 ID와 PW(카카오 아이디, 비밀번호 등)를 입력합니다.
(5)인증 서버가 사용자 인증 정보를 확인 후 권한 요청을 승인하면, 인증 서버는 사용자에게 인증 코드(Authorization code)를 반환합니다.
(6)사용자는 클라이언트 애플리케이션에게 Redirect로 인증 코드를 전달합니다.
(7)클라이언트 애플리케이션은 전달 받은 인증 코드로 인증 서버에 액세스 토큰(Access Token)을 요청합니다.
(8)인증 서버는 액세스 토큰을 발급 후, 클라이언트 애플리케이션에 반환합니다.
(9)사용자는 로그인에 성공합니다.
(10)사용자는 클라이언트에 서비스(리소스)를 요청합니다.
(11)클라이언트 애플리케이션은 Access Token을 사용해 리소스 서버에 API를 요청합니다.
(12)리소스 서버는 Access Token을 확인하고, 클라이언트 애플리케이션에게 요청된 API를 제공합니다.
(13)클라이언트 애플리케이션은 리소스 서버로부터 제공받은 API를 토대로 사용자에게 서비스를 제공합니다.
*인증 서버는 클라이언트에게 액세스 토큰을 발급하는 서버로, 카카오 로그인 서비스가 인증 서버가 될 수 있습니다.
*리소스 서버는 리소스(프로필, 사진 등)를 저장하고 제공하는 서버입니다. 카카오 서버나 구글 드라이브 등이 리소스 서버가 될 수 있습니다.
*클라이언트 서버는 사용자의 권한을 받아 리소스를 요청하는 애플리케이션입니다. 사용자가 현재 사용하고 있는 웹 사이트가 될 수 있습니다.