OAuth 2.0

퐁치키메실차·2022년 2월 3일
0

OAuth 란?

Open Auth의 줄인말로 Auth는 인증(Authentication) & 인가(Authorization) 두가지 의미를 내포하고 있다.

Oauth 는 외부서비스의 인증 및 권한부여를 관리하는 범용적인 *프로토콜

사용자가 어플리케이션에서 모든 권한을 넘기지 않고 사용자 대신 서비스를 이용할 수 있게 해주는 HTTP 기반의 보안 규약

인증 (Authentication)

무언가를 확인하는 행위, 사람을 인증하는 것은 사람들의 신분을 구성하는 것을 말한다.

인가 (Authorization)

인증 된 대상에게 권한을 부여하는 것

OAuth 2.0 등장배경

기존 방식은 ID/PW 방식으로 인증 성공 시 쿠키에 세션 값을 저장하고 권한을 부여하던 방식이었다.

하지만 이와 같은 방식은 아래와 같은 단점이 있었다.

  • 서버 요청 마다 DB 를 통해 현재 상태를 매번 확인해야 하는 “낭비”가 발생함.

  • “모바일 앱”에 적합하지 않음.

  • 서로 다른 서비스 간에 정보 “공유”가 어려움.

이에 2006년 트위터 개발자와 Gnolia 의 개발자가 논의 후 OAuth가 등장했고 2010년에 1.0이 발표 되었고, 2012년에 2.0 발표.

1.0과 2.0의 차이는 아래와 같다.

  • 모바일 어플리케이션에서도 사용이 용이해짐.

  • 반드시 HTTPS를 사용하기에 보안이 강화됨.

  • Access Token 의 만료기간이 생김.

4가지 역할

OAuth를 설명하기 앞서 4가지 역할에 대해 설명이 필요하다. 설명 시 자주 쓰이기 때문에 알아 둘 필요가 있다.

Resource Owner (일반 사용자)

디디쌤에 회원가입 또는 로그인을 원하는 사용자가 될 것이며 자신의 리소스에 대한 접근 권한을 가지고 있는 주체이다.

Client Application

사용자가 접근하는 서비스로서 사용자의 데이터에 대한 요청을 보내는 주체가 된다.

Resource Server

사용자의 데이터를 보유한 기관으로써 유효한 권한을 부여받은 client가 요청할 경우 데이터를 제공한다.

Google, Naver, Facebook, Kakao와 같은 서비스라고 생각하면 된다.

Authorization Server

사용자의 데이터에 접근할 권한을 제공하는 서버, Client 요청에 따라 정보제공 동의를 받은 후 권한을 부여한다.

인증 흐름도

OAuth 2.0 인증과 인가가 되는 과정을 그린 그림이다.

(A) Client 측에서 Resource Owner에게 인증 방식 4가지 중 하나로 승인 요청한다.

(B) Resource Owner 측에서 Client 측으로 인증 권한을 부여함

(C) Client 는 부여받은 인증권한으로 Authorization Server에 엑세스 토큰을 요청한다.

(D) Authorization Server에서 Client가 부여받은 인증권한에 대한 유효성 검사 후 통과되면 Access Token을 부여한다.

(E) Client는 받아온 Access Token을 이용하여 Resource Owner의 Resource에 접근 요청한다.

(F) Resource Server는 해당 Access Token의 유효성을 검사 후 통과하면 요청에 대한 Resource를 Client에 넘겨준다.

인증방식

4가지 인증방식 중 가장 많이 사용되는 타입에 대해서만 알아보자면 Authorization Code Grant Type이 가장 많이 쓰인다고 한다.

[Authorization Code Grant Type]

*Refresh Toeken 유효기간 설정 중요, 유효기간 끝났을 때는 재로그인 해야함.

클라이언트는 리소스 주인이 권한 서버에게 Client ID, Redirect URI, Response_type을 code로 지정하여 전달하도록 유도

인증이 된다면 code값을 돌려 받음

클라이언트는 전달 받은 code를 사용해 필요한 정보들과 함께 access token 획득 요청을 권한서버에게 보냄

획득한 access token을 사용해 리소스 서버에 사용자의 데이터를 요청

필요작업

우리 API 서버는 “Client” 부분이 됨.

필요한 OAuth 서비스

  • Kakao

  • Facebook

  • Google

  • AppleID

우리가 만들 서버에서 OAuth를 이용하기 위해서는 사전에 OAuth에 등록하는 과정이 필요함. 등록 후 APP_ID와 CLIENT_ID 등을 보내야 OAuth 에서는 어느 서비스인지를 알 수 있음

목표: 직접 구현해보면 좋을 듯

출처

0개의 댓글