목표
OAuth 공부
OAuth2.0
인증 및 권한 부여 프레임워크이다.
OAuth2.0은 third-party 애플리케이션이 사용자의 리소스에 접근하기 위한 절차를 정의하고 서비스 제공자의 API를 사용할 수 있는 권한을 부여한다.
말이 어렵지만 쉽게 예시를 들어 주자면, 간편 로그인 기능을 제공한다고 생각하면 된다.
구성
1. 리소스 소유자(Resource Owner)
-> 보호된 리소스(사용자 데이터)에 접근할 권한을 가진 사용자이다.
쉽게 말해 third-party 애플리케이션에 소셜 로그인 인증을 하는 사용자를 의미한다.
2. 클라이언트(Client)
-> 리소스 소유자의 데이터에 접근하기 위해 OAuth 인증을 사용하는 애플리케이션
웹 서버, 모바일 앱, 데스크톱 애플리케이션 등이 될 수 있다.
3. 리소스 서버(Resource Server)
-> 보호된 리소스(사용자 데이터)를 가지고 있는 서버이다.
예를 들어 페이스북이나 네이버는 사용자 프로필 정보를 저장하는 리소스 서버가 될 수 있다.
4. 권한 서버(Authorization Server)
-> 인증을 관리하고 클라이언트에게 접근 권한을 부여하는 서버
OAuth 2.0에서는 인증 서버라고도 한다.
이 서버는 사용자 인증, 권한 부여 및 토큰을 발급한다.
인가 코드(authorization code), 액세스 토큰(access token)
작동 방식
1. 인가(Authorization)
인가란 접근 권한을 얻는 일을 말한다.
-> 클라이언트가 리소스 서버에 사용자 데이터 접근 권한을 요청한다.
-> 서버는 클라이언트의 인증 권한을 확인 후 인가 코드를 발급한다.
2. 토큰 발급(Token Issuance)
-> 클라이언트가 인가 코드를 통해 권한 서버에 엑세스 토큰을 요청한다.
-> 권한 서버는 검증 후 토큰을 발급한다.
-> 해당 토큰은 클라이언트가 리소스 서버에 접근할 때 사용된다.
3. 리소스 접근(Resource Access)
-> 클라이언트가 엑세스 토큰을 통해 리소스 서버에 데이터 접근 요청을 한다.
-> 리소스 서버는 토큰 검증 후 데이터를 반환한다.
4. 토큰 갱신(Token Refresh)
-> 엑세스 토큰의 기간이 만료되면, 클라이언트는 리프레시 토큰을 통해 새로운 엑세스 토큰을 요청할 수 있다.
-> 권한 서버는 리프레시 토큰을 검증하고, 새로운 엑세스 토큰을 발급한다.
JWT와 비슷한데?
JWT에 대한 글도 작성하고 OAuth에 대한 글도 작성하면서 느낀점이다.
둘 다 비슷한 작동 방식을 가지고 있다고 생각했다.
가장 큰 차이는 "왜 사용하냐" 라고 생각한다.
OAuth의 경우에는 third-party 애플리케이션에게 권한을 부여하는 것이고,
JWT의 경우에는 클라이언트와 서버 간의 인증에 사용된다.
OAuth와 JWT를 함께 사용하는 경우도 있다.
결국 중요한 것은 둘은 다른 목적과 사용 상황이 있어서 적절히 선택하는 것이 중요하다.
OAuth의 동작 방식에 나오는 단어들의 뜻을 혼동하지 않는다면 충분히 구분할 수 있다고 생각한다.