✏️ 학습 목표
- Token의 종류에 대해 이해할 수 있다.
- Refresh Token과 Access Token의 차이를 이해한다.
- OAuth의 키워드를 설명할 수 있다.
- Authorization Code와 Access Token의 차이에 대해 이해할 수 있다.
- Authorization 서버와 Resource 서버의 차이에 대해 이해할 수 있다.
✏️ OAuth
- 인증을 중개해주는 메커니즘이다.
- 보안된 리소스에 액세스하기 위해 클라이언트에게 권한을 제공하는 프로세스를 단순화하는 프로토콜이다.
🔊 OAuth의 장점
✅ 쉽고 안전하게 새로운 서비스를 이용할 수 있다.
- 사용자는 OAuth를 통해 특정 사이트에 아이디, 비밀번호, 이름, 전화 번호 등의 정보를,
- 일일이 입력하지 않아도 클릭 몇 번 만으로 손쉽게 가입할 수 있어 편리하다.
- 정보를 해당 서비스에 직접 노출하는 것이 아니기 때문에 직접 가입하는 것보다 더 안전하다.
- 회원의 정보를 직접 가지고 있음으로 인해서 발생할 수 있는,
- 회원 정보 유출의 위험성에서 부담을 덜 수 있다.
✅ 권한 영역을 설정할 수 있다.
- 사용자는 원하는 정보에만 접근을 허락할 수 있어 보다 더 안전하다.
- OAuth 설정 페이지에서는 Application에서 필요한 정보를 선택할 수 있다,
- 사용자는 이 중 원하는 정보만 선택적으로 제공할 수 있다.
🔊 OAuth의 주체
✅ Resource Owner
- OAuth 인증을 통해 소셜 로그인을 하고싶어하는 사용자이다.
Resource
는 사용자의 이름, 전화번호 등의 정보를 뜻한다.
✅ Resource Server & Authorization Server
- 사용자가 소셜 로그인을 하기 위해서 사용하는, 이미 사용중인 서비스의 서버 중,
- 사용자의 정보를 저장하고 있는 서버를 특정해서
Resource Server
라고 부른다.
- 이미 사용중인 서비스의 서버 중 인증을 담담하는 서버를,
- 특정해서
Authorization Server
라고 부른다.
✅ Application
- 경우에 따라서 Applicaiton을 Client와 Server로 세분화해서 지칭하기도 한다.
🔊 OAuth 인증 방식의 종류와 흐름
Implicit Grant Type
, Authorization Code Grant Type
,
Refresh Token Grant Type
✅ Implicit Grant Type
- 소셜 로그인에서 Implicit Grant Type은 잘 사용하지 않는다.
- 기존 서비스에 로그인만 되어있다면 새로운 서비스에,
- 바로 액세스 토큰을 내어주기 때문에 보안성이 조금 떨어지기 때문이다.
- 사용자가
Application
에 접속합니다.
Application
에서 Authorization Server
로 인증 요청을 보낸다.
Authorizaiton Server
는 유효한 인증 요청인지 확인한 후 액세스 토큰을 발급한다.
Authorization Server
에서 Application
으로 액세스 토큰을 전달한다.
Application
은 발급받은 액세스 토큰을 담아 Resource Server
로 사용자의 정보를 요청한다.
Resource Server
는 Application
에게서 전달 받은 액세스 토큰이 유효한 토큰인지 확인한다.
- 유효한 토큰이라면,
Application
이 요청한 사용자의 정보를 전달한다.
✅ Authorization Code Grant Type
Authorization Code
를 사용한 인증 단계가 추가로 있기 때문에 비교적 더 안전하다.
- 소셜 로그인을 구현하는 방식의 선택지가 늘어난다.
- 사용자가 Application에 접속한다.
- Application에서 Authorization Server로 인증 요청을 보낸다.
Authorizaiton Server는 유효한 인증 요청인지 확인한 후 Authorization Code를 발급한다.
Authorization Server에서 Application으로 Authorization Code를 전달한다.
Application이 Authorization Code로 발급받은 Authorization Code를 전달한다.
- Authorizaiton Server는 유효한 Authorization Code인지 확인한 후 액세스 토큰을 발급한다.
- Authorization Server에서 Application으로 액세스 토큰을 전달한다.
- Application은 발급받은 액세스 토큰을 담아 Resource Server로 사용자의 정보를 요청한다.
- Resource Server는 Application에게서 전달 받은 액세스 토큰이 유효한 토큰인지 확인한다.
- 유효한 토큰이라면, Application이 요청한 사용자의 정보를 전달한다.
✅ Refresh Token Grant Type
- 용자가 새로운 서비스를 이용하다가 액세스 토큰이 만료되었을 때,
- 매번 이 과정을 거쳐서 액세스 토큰을 다시 발급받아야 한다면 사용자 편의성에 있어서는 좋지 않다.
- 그래서 리프레시 토큰을 같이 발급해준다.
- Authorization Server로 리프레시 토큰을 보내준다.
- Authorization Server는 리프레시 토큰을 검증한다.
- 액세스 토큰을 다시 발급해준다.
- Application은 다시 발급 받은 액세스 토큰을 사용해서 Resource Server에서 사용자의 정보를 받아오게 된다.