본문 바로가기
공부/기타등등

[web] OAuth

by 야옹아옹 2023. 1. 9.

 

OAuth

✨ OAuth란?

RFC6749

인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, 접근 위임을 위한 개방형 표준 - wiki

즉, 다른 웹사이트 상 정보(구글, 페이스북 등..)를 웹 사이트나 어플리케이션에게 접근 권한을 부여할 수 있는 공통적인 방법이다.

Jumpit 로그인 버튼들

Jumpit 로그인 버튼들

사용자는 어플리케이션을 사용할 때, 구글과 같은 사용자 인증 방식을 사용할 수 있다.

등장 배경

OAuth 이전에는 인증 방식의 표준이 없었기 때문에 기존의 기본 인증인 아이디와 비밀번호 방식을 사용했다. 이는 보안상 취약한 구조일 가능성이 높다.

기본 인증이 아닐 경우에는 각 어플리케이션들이 각자 회사에서 개발한 방법대로 사용자를 확인했다. OAuth는 이렇게 제각각인 인증방식을 표준화한 인증 방식이다.

✨ OAuth role

resource owner

  • 자원의 소유자. Client가 제공하는 서비스를 통해 로그인하는 실제 유저

resource server

  • Client가 제어하고자 하는 자원을 보유하고 있는 서버. ex) 구글, 페이스북, 카카오

client

  • resource server 접속해 사용자 정보를 가져오고자 하는 클라이언트(웹 어플리케이션)

authorization server

  • 인증을 담당하고 access token을 발급하는 서버

✨ OAuth 인증의 종류

access token을 얻는 방법들을 의미한다. 4가지가 있다.

Authorization Code

간편 로그인에서 사용하는 방식이다.

클라이언트는 리소스 소유자가 직접 authorization server에게 인증을 요청하게 한 후, 인증 성공 후 리다이렉트된 URL에서 authorization code를 얻는다.

해당 authorization code를 사용해 access token을 얻는다.

Implicit

자바스크립트와 같은 스크립트 언어를 사용해 브라우저에 구현된 클라이언트에 최적화된 방법

authorization code가 필요 없이 바로 Access Token이 발급된다.

Token을 얻기 위한 절차가 간소화되기 때문에 응답성과 효율성은 높아지지만 Access Token이 URL에 바로 노출된다는 단점이 있다.

Resource Owner Password Credentials

아이디와 패스워드로 access token을 받아오는 방식

리소스 오너와 클라이언트 간의 신뢰가 높은 수준일 경우에만 사용해야한다.

아이디와 비밀번호를 직접보내기 때문

따라서 클라이언트가 제 3자가 아닌 경우에만 사용해야한다.

Client Credentials

클라이언트 자신이 관리하는 리소스 혹은 권한 서버에 해당 클라이언트를 위한 제한된 리소스 접근 권한이 설정되어 있는 경우 사용

✨ 용어

  • Resource Server - Client가 제어하고자 하는 자원을 보유하고 있는 서버
  • ex) 페이스북, 구글, 카카오 등..
  • Resource Owner - 자원의 소유자, 사용자
  • ex) Client가 제공하는 서비스를 통해 로그인하는 실제 유저
  • Client - Resource Server에 접속해서 정보를 가져오고자 하는 클라이언트(웹 어플리케이션)
  • Authorization Server: 인증을 담당하고 있는 서버. Access Token을 발급
  • Authorization Code: Authorization Grant의 한 타입으로 Access Token을 발급받기 위한 Code를 의미
  • Access Token: 보호된 리소스에 액세스하는 데 사용되는 인증 토큰. 이 Access Token으로 이제 Resource Server에 접근 가능
  • Refresh Token: 발급받은 Access Token이 만료될 시 Refresh Token을 통해 새로운 Access Token을 발급 받을 수 있다.

✨ OAuth Flow

OAuth 등록을 해야 사용할 수 있다.

  • Client Id
    • 내가 만든 어플리케이션Client를 식별하기 위한 Id값
  • Client Secret
    • 외부에 노출되면 절대로 안된다.
  • redirect URL
    • 인증 완료 후에 code를 보내줄 경로

Authorization Code 흐름

Untitled

  1. 클라이언트가 Resource owner에게 인증 요청을 보낸다.
  2. Resource owner는 Authorization Server에 인증요청을 보낸다. Authorization Server는 기존의 OAuth를 등록할 때 설정한 redirect URL에 파라미터로 authorization code를 넣어서 클라이언트에게 전달한다.
  3. 클라이언트는 얻은 authorization code로 Authorization Server에 Access Token을 요청한다.
  4. authorization server는 Access Token을 클라이언트에 제공한다.
  5. 얻은 Access Token을 사용해 필요한 사용자 정보를 Resource Server에서 가져온다.

Untitled

댓글