S3U7 [Backend] OAuth

전형호·2023년 3월 9일
0

✏️ 학습 목표

  • 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은 잘 사용하지 않는다.
  • 기존 서비스에 로그인만 되어있다면 새로운 서비스에,
  • 바로 액세스 토큰을 내어주기 때문에 보안성이 조금 떨어지기 때문이다.
  1. 사용자가 Application에 접속합니다.
  2. Application에서 Authorization Server로 인증 요청을 보낸다.
  3. Authorizaiton Server는 유효한 인증 요청인지 확인한 후 액세스 토큰을 발급한다.
  4. Authorization Server에서 Application으로 액세스 토큰을 전달한다.
  5. Application은 발급받은 액세스 토큰을 담아 Resource Server로 사용자의 정보를 요청한다.
  6. Resource ServerApplication에게서 전달 받은 액세스 토큰이 유효한 토큰인지 확인한다.
  7. 유효한 토큰이라면, Application이 요청한 사용자의 정보를 전달한다.

✅ Authorization Code Grant Type

  • Authorization Code를 사용한 인증 단계가 추가로 있기 때문에 비교적 더 안전하다.
  • 소셜 로그인을 구현하는 방식의 선택지가 늘어난다.
  1. 사용자가 Application에 접속한다.
  2. Application에서 Authorization Server로 인증 요청을 보낸다.
  3. Authorizaiton Server는 유효한 인증 요청인지 확인한 후 Authorization Code를 발급한다.
  4. Authorization Server에서 Application으로 Authorization Code를 전달한다.
  5. Application이 Authorization Code로 발급받은 Authorization Code를 전달한다.
  6. Authorizaiton Server는 유효한 Authorization Code인지 확인한 후 액세스 토큰을 발급한다.
  7. Authorization Server에서 Application으로 액세스 토큰을 전달한다.
  8. Application은 발급받은 액세스 토큰을 담아 Resource Server로 사용자의 정보를 요청한다.
  9. Resource Server는 Application에게서 전달 받은 액세스 토큰이 유효한 토큰인지 확인한다.
  10. 유효한 토큰이라면, Application이 요청한 사용자의 정보를 전달한다.

✅ Refresh Token Grant Type

  • 용자가 새로운 서비스를 이용하다가 액세스 토큰이 만료되었을 때,
  • 매번 이 과정을 거쳐서 액세스 토큰을 다시 발급받아야 한다면 사용자 편의성에 있어서는 좋지 않다.
  • 그래서 리프레시 토큰을 같이 발급해준다.
  1. Authorization Server로 리프레시 토큰을 보내준다.
  2. Authorization Server는 리프레시 토큰을 검증한다.
  3. 액세스 토큰을 다시 발급해준다.
  4. Application은 다시 발급 받은 액세스 토큰을 사용해서 Resource Server에서 사용자의 정보를 받아오게 된다.
profile
코드스테이츠 블로그

0개의 댓글