1. OAuth

사용자 인증이란 하나의 세션 동안 사용자의 신원을 확인하여 인증하는 것을 말합니다.

인증 방식으로는 다음과 같은 것들이 있습니다.

  • 기본 인증(ID/PW)
  • 토큰 인증
  • 전자 서명

흔히 애플리케이션에서 사용자의 신원을 확인하기 위해 ID와 PW를 이용한 기본 인증방식을 사용합니다.

일반적으로 로그인 == 사용자 인증으로 오해하고 있는데, 로그인은 사용자 인증의 한 방식일 뿐입니다.

그러나 기본 인증 방식은 보안에 매우 취약한 구조이기 때문에 다른 대안들이 떠오르고 있는데, OAuth가 그 중 하나입니다.

OAuth는 위의 인증방식 중 토큰 인증 방식을 사용합니다.


대부분의 서비스는 자체적으로 기본인증을 바탕으로 한 사용자 인증 방식을 개발하고 있습니다.

그렇게 되면 서비스마다 다른 인증방식을 사용하게 될텐데요, OAuth는 이처럼 서비스마다 제각각인 인증방식을 표준화한 인증방식이라 할 수 있습니다.


OAuth는 이미 여러 웹 서비스에서 사용중이며, 아래의 예는 왓챠( https://watcha.net )의 로그인 및 회원가입 화면입니다.



이처럼 "페이스북으로 회원가입 하기", "구글 계정으로 회원가입 하기" 등의 방식으로 회원가입을 하는 서비스를 많이 보았을 것입니다.

이것이 바로 OAuth입니다.


즉, 자신의 애플리케이션(예를 들어, 왓챠)에서 사용자 인증을 하기 위해 다른 애플리케이션(페이스북)의 사용자 인증방식을 하도록 인가하는 것이 OAuth입니다.

다시 말하면 OAuth는 사용자 인증 프로토콜이 아닌, 인가 프로토콜입니다.





2. OAuth 구성요소

OAuth를 구성하는 요소는 다음과 같습니다.

  • Client
    • Resource를 직접 사용하는 사용자
  • Resource Owner
    • OAuth를 사용하는 소유자
    • 일반 애플리케이션 ex) 왓챠, 청와대 청원 게시판 ...
  • Authorization Server
    • OAuth 인증 서버
  • Resource Server
    • Rest API Server
    • 사용자 인증이 잘 되어 있는 애플리케이션 ex) 페이스북, 구글 ...






3. OAuth 진행 과정

OAuth 진행 과정은 왓챠라는 웹 서비스에서 페이스북으로 로그인하는 방식에 대한 예시로 말씀드리겠습니다.

  1. 왓챠에 접속
  2. "페이스북으로 회원가입 하기" 버튼 클릭
  3. 페이스북 로그인 창으로 이동 ( 위 그림의 A )
  4. 페이스북 로그인 성공 ( B )
  5. "해당 사이트의 접근을 허용할 것인가?" 창이 생성
  6. "허용"을 누르면( C ) 왓챠에서 로그인 목적으로 사용할 수 있는 토큰( token )을 페이스북이 발급 ( D )
  7. 발급받은 토큰을 이용하여 만료기간까지 서비스를 사용 ( E, F ) 

( D ) 과정에서 페이스북으로부터 토큰을 발급 받았다는 것은 왓챠에서 로그인을 할 때 페이스북이 대신해준다는 의미입니다.

즉, 토큰을 발급해줌으로써 로그인 할 수 있는 권한을 부여한 것입니다.



결론적으로 OAuth의 과정을 다음과 같이 요약할 수 있습니다.

  1. 사용자 인증 방식이 잘 구현된 어떤 회사(서비스)에 인증을 인가
  2. 인증 절차 수행
  3. 인증이 되었다는 토큰을 받아 나의 애플리케이션에 여러 권한들을 부여




이상으로 OAuth 인증 방식에 대해 알아보았습니다.

OAuth는 기존의 쿠키와 세션 기반의 사용자 인증 방식을 보완한 토큰 기반의 인증 방식입니다.

엄밀히 말하면, 사용자 인증을 인가하는 방식이라고 할 수 있습니다.


OAuth를 사용하면 좋은 점은, 구글 또는 페이스북 같이 많은 사람들이 이용하는 웹 서비스의 계정을 나의 애플리케이션에서도 사용할 수 있다는 점입니다. 구글, 페이스북에서 이미 사용자 인증을 수행했기 때문에 나의 애플리케이션에서는 그 회사로부터 로그인 권한을 부여 받기만 하면 되는 것입니다.


[ 참고 자료 ] 

http://www.ktword.co.kr/abbr_view.php?m_temp1=2139

https://ko.wikipedia.org/wiki/OAuth

http://interconnection.tistory.com/76