[Web] OAuth 개념 학습

Yalstrax·2021년 8월 5일
1

Study

목록 보기
7/25
post-thumbnail

OAuth 2.0

OAuth는 서버에서 인증을 처리하는 것과 달리 인증을 중개하는 개념입니다. 보안된 리소스에 액세스하기 위해 클라이언트에게 권한을 제공하는 프로세스를 단순화하는 개방형 프로토콜입니다.

사용자 정보를 갖고있는 웹 서비스(Google, GitHub 등)에서 사용자 인증을 대신하고, 접근 권한에 대해 토큰을 발급한 후 이를 이용해 내 서버에서 인증이 가능해집니다.

OAuth 인증을 사용하게된 이유

  • 한 명의 사용자가 이용하는 웹 서비스, 앱이 많아지면서 이 서비스를 이용하기 위해 회원가입을 해야한다.
  • 각 서비스별로 ID와 Password를 기억하는 것은 매우 귀찮다.
  • 중요한 사이트들의 ID와 Password만 기억하고, 이 사이트들을 통해 로그인할 수 있다.
  • 검증되지 않은 App에서 OAuth로 로그인한다면, 유저의 민감한 정보가 App에 노출될 수 없다. 인증 권한에 대한 허가를 유저에게 미리 구해야하기 때문에 더 안전하게 사용할 수 있다.

OAuth 용어

  • Resource Owner : 액세스 중인 리소스의 유저
  • Client : Resource Owner를 대신하여 보호된 리소스에 액세스하는 앱
  • Resource Server : 클라이언트의 요청을 수락하고, 응답하는 서버, 유저의 리소스를 가지고있는 서버
  • Authorization Server : 리소스 서버가 액세스 토큰을 발급받는 서버
  • Authorization Grant : 클라이언트가 액세스 토큰을 얻을 때 사용하는 자격 증명
  • Authorization Code : 액세스 토큰을 발급받기 전에 필요한 코드, 클라이언트 ID와 Secret을 포함한 허가증과 유사
  • Access Token : 보호된 리소스에 액세스하는 데 사용되는 Credentials
  • Scope : 액세스 토큰으로 액세스할 수 있는 리소스의 범위

Grant Types

Grant type은 클라이언트가 액세스 토큰을 얻는 방법으로, 여러가지 방법이 있습니다.

  • Authorization Code Grant Type
  • Implicit Grant Type
  • Client Credentials Grant Type
  • Resource Owner Credentials Grant Type
  • Refresh Token Grant Type

볼드체의 타입들이 가장 많이 쓰이는 타입입니다.

Authorization Code Grant Type

Grant Type 중에서 가장 일반적으로 사용되는 유형입니다.

유저가 승인을 한 후에, 액세스 토큰을 얻기 위해 Authorization Code를 받아 액세스 토큰과 교환을 합니다. 보안성 강화를 위해, 클라이언트에서 클라이언트 ID를 공유하여 Authorization Code를 받고, 서버에 이 Authorization Code를 요청하여 Access Token을 응답받는 방식입니다.

Authorization Code Grant Type의 흐름은 다음과 같습니다.

  1. 먼저, 유저가 서비스 이용을 위해 클라이언트에 접근을 요청합니다.

  2. 클라이언트는 이 유저를 검증하기 위해 권한 관리 서버(Authorization Server)로 리다이렉트합니다.

  3. 권한 관리 서버에서 접근이 승인된다면, Authorization Code를 클라이언트에게 제공합니다.

  4. 클라이언트는 권한 관리 서버에 Authorization Code를 요청에 함께 담아 보내고, Authorization Code를 확인한 권한 관리 서버는 Access Token을 클라이언트에게 교환해줍니다.

  5. 클라이언트는 받은 Access Token으로 요청한 데이터가 존재하는 Resource Server에 접근할 수 있습니다.

  6. 클라이언트는 Access Token을 4번에서 획득했기 때문에, 이 토큰으로 권한 관리 서버를 거치지않고 직접적으로 Resource Server와 응답을 교환합니다.

  7. Resource Server는 클라이언트가 요청한 리소스를 전달합니다.

Refresh Token Grant Type

액세스 토큰은 유효 기간이 지나면 만료가 됩니다. 만료가 될 때마다 유저에게 인증을 요구하는 것이 번거롭습니다. 그래서 다시 액세스 토큰을 편리하게 받기 위해 Refresh Token을 사용합니다.

액세스 토큰과 리프레쉬 토큰의 만료 유효 기간이 리프레쉬 토큰이 더 길기 때문에 가능한 방법입니다.

  1. 만일 액세스 토큰이 만료된 유저가 클라이언트에 접근한 경우, 클라이언트는 권한 관리 서버에 리프레쉬 토큰을 요청합니다.

  2. 권한 관리 서버는 새로운 액세스 토큰을 응답합니다.

  3. 클라이언트는 액세스 토큰으로 유저의 Resource Server에 접근을 요청합니다.

profile
즐겁다면 그것만으로 만만세!

0개의 댓글