OAuth 란?
내부 서비스에 가입해서 내부 서비스에서 정보 인증이 필요 없이 외부 서비스에서도 인증을 가능하게 하고 그 서비스의 API를 이용하게 해주는 것입니다 oauth를 통해 별도의 회원가입 없이 로그인을 제공하는 카카오, 페이스북 등 플랫폼의 아이디만 있으면 서비스를 이용 할 수 있습니다.
OAuth 용어
- Resource Owner: Access 중인 리소스의 유저 (소셜 로그인하려는 사용자)
- Client: Resource owner를 대신하여 보호된 리소스에 access하는 응용프로그램 (브라우저나 앱)
- Resource server: 클라이언트의 요청을 수락하고 응답하는 서버 (id, image가 담긴 서버)
- Authorization server: Resource server가 액세스 토큰을 발급받는 서버 (Authorization code를 client에게 제공)
- Authorization grant: 클라이언트가 액세스 토큰을 얻을 때 사용하는 자격 증명
- grant type: 클라이언트가 액세스 토큰을 얻는 방법
- Authorization code: 액세스 토큰을 발급받기 전에 필요한 code (client Id, client secret이 포함된 코드)
- Access token: 보호된 리소스에 액세스하는데 사용되는 credentials (문자열로 구성되어있음)
- Scope: 액세스 토큰의 권한을 지정
Exapmle
- Resource Owner: 실제 사용자
- Client: App, 브라우저
- Resource server: 페이스북, 카카오, 네이버, 구글 등
- Authorization server: 페이스북, 카카오, 네이버, 구글
- scope: image, id 등 가져올 데이터의 범위
Grant Type
- Authorization code Grant Type
- Refresh Token Grant Type
Authorization code Grant Type
- 사용 이유: 보안성
직접 액세스 토큰을 받아오면 토큰이 탈취될 위험이 있으므로 Authorization code를 받아 이 코드를 통해 액세스 토큰을 받아오면 중간에 탈취될 위험을 줄일 수 있다.
Refresh Token Grant Type
- 사용 이유: 편리성
유효 기간이 만료되 액세스 토큰을 사용자에게 인증 권한을 요청하지 않고 다시 받아오기 위해 사용하는 방법
클라이언트가 직접 Authorization server로 접근해 refresh token을 이용해 액세스 토큰을 받아온다. Authorization server가 사용자에게 접근 권한 허용 메세지를 보내고 허용 권한을 받아오는 과정이 사라지게 된다.
OAuth 순서
- 사용자가 클라이언트에게 접근
- 클라이언트가 사용자에게 Authorization server로 리다이렉트 (사용자 정보를 얻기위해)
- 사용자는 Authorization server에 클라이언트에게 액세스 권한 부여 요청
- Authorization server는 클라이언트에게 액세스 토큰을 발급받을 수 있는 Authorization code 제공
- 클라이언트는 Authorization code를 통해 Authorization server에서 액세스 토큰을 받음
- 클라이언트는 액세스 토큰을 통해 Resource server에 접근
- 클라이언트는 액세스 토큰과 함께 API 요청을 Resrouce server에 보냄
- Resource server는 클라이언트가 요청한 리소스를 전달
- 이후, 클라이언트는 Resource server에 계속해서 접근 가능
심화 학습
- Authentication과 Authorization의 차이
- 직접 구현해 보기