Products & Services

OAuth 2.0 - 쉽고 편리한 로그인

TechNote.kr 2016. 2. 29. 17:01
728x90



 최근들어 일부 어플이나 웹사이트에서 자체 ID가 아닌 Naver, Google, Facebook, KakaoTalk 같은 사이트의 ID를 이용해서 접속할 수 있는 경우가 늘어나고 있다. 이는 이미 존재하는 사이트들의 ID를 통해 접속시 불필요한 회원 가입을 하지 않아도 되고, 소규모 사이트들의 취약한 보안에 의한 정보 유출에 대한 우려도 줄이는 역할을 하고 있다.


[늘어나고 있는 OAuth 2.0]


이와 같은 기술의 기반은 OAuth 2.0 규격에 의해 정의되어 지고 있는데 이 Article에서 그 동작의 개요에 대해 알아보도록 하자.



OAuth 2.0 및 OAuth 2.0의 동작


OAuth가 사용되기 이전에는 각 웹사이트 나름의 인증방식을 통해 인증을 하고 권한을 부여하여 서비스를 제공하고 있었다. 이에 따라 모든 사이트들이 제각각의 인증방식을 사용하고 있었는데, 이를 통합해보고자 만들어진 표준이 OAuth 이다.

(OAuth는 Open Authorization의 약자로 2006년 시작되어 현재는 OAuth 2.0이 사용되고 있다.)


임의의 어플이나 웹사이트가 구글 OAuth 2.0 방식을 이용해 구현하게 된다면 구글 ID/Password를 통해 인증을 하고 관련 권한을 획득할 수 있게 되는 것이다. 


쉬운 이해를 위해 기술에 대한 설명보다는 예를 들어 동작 Flow를 살펴보도록 하자


이해를 돕기 위해 철수가 Memo 어플 사용을 위해 OAuth 2.0(Google ID)을 이용하여  Google 인증하는 경우를 설명해 보겠다.


1. 철수가 Memo 어플 사용을 위해 어플 한켠에 위치한 "Log in with Google ID" 버튼을 터치한다.

2. Memo 어플은 "Request Token"을 Google에 요청하고, Google은 "Request Token"을 Memo 어플에 전달한다.

3. "Request Token"을 전달받은 Memo 어플은 Google에서 제공하는 "Log in" 페이지로 이동하고, 철수는 여기서 Google ID와 password를 입력하여 인증을 한다.

4. 인증이 끝나면 Google은 다시 Memo 어플로 이동한다. 

5. Memo 어플은 "Access Token"을 Google에 요청하고, Google은 "Access Token"을 Memo 어플에 전달한다.

6. Memo 어플은 전달받은 "Access Token" 을 이용하여 Google의 사용자 정보 및 서비스에 접근한다.


큰 OAuth 2.0의 Flow는 위의 경로를 따르게 된다. 

여기서 하나 인지해야 하는 부분은 OAuth 2.0은 직접 Authentication(인증)을 하는 Protocol이 아니라는 것이다. 각 주체(Google, Naver...)들로 하여금 인증을 하도록 하고, 그 결과물로 token을 전달받아 제공하는 사용자 정보에 접근하거나 서비스를 사용할 수 있게 되는 것이다.


Authentication? Authorization?


다시 한번 언급하자면 OAuth 2.0 은 Authorization(권한 획득)을 위한 protocol이지, Authentication(인증)을 위한 protocol이 아니다. Authentication(인증)은 각 서비스 제공자가 위의 Step 3에서 각자 수행하는 것으로 OAuth 2.0 protocol 과는 직접적인 관련이 있지 않다.

각기 서비스 제공자가 수행한 Authentication(인증)을 바탕으로 Authorization(권한 획득)된 token을 가지고 서비스를 이용할 수가 있는 것이다. 


OAuth 2.0은 인증 프로토콜이 아니다.



[참고사항] Authentication 과 Authorization 의 차이에 대한 인지


Authorization(권한 획득)과 Authentication(인증)에 대한 이야기가 자주 나올 텐데 혼란을 줄이기 위해 정리해 보았다.


OAuth 2.0의 개념을 좀 더 명확히 잡기 위해서는 Authentication과 Authorization의 차이에 대해 명확히 인지하는 것이 필요하다. 간략히 정의하면, Authentication(인증)은 Authorization(권한 획득)을 위한 방법이라고 말할 수 있다.


하나의 예를 들어보면 다음과 같다.


사용자가 ID와 Password 입력을 통해 Authentication(인증)을 진행하면 그 대상 사이트(혹은 앱)에 대한 Authorization(권한 획득)을 할 수 있게 되는 것이다.




 OAuth 2.0 은 별도의 인증에 대한 구현없이 기존 사용자들이 보유한 Naver, Google 등의 ID를 이용해 권한을 획득하도록 도와준다. 사용자들의 입장에서는 별도의 가입없이 바로 사용이 가능케하며, 어플 제작사나 웹사이트 운영자들의 입장에서는 인증을 위한 별도의 구현을 하지 않아도 되게 해준다.


 하지만 하나 알아야 하는 부분은 위와 같이 Google, Naver 를 통해 Access Token이 생성되어 사용가능하게 되면 일부 사용자 정보는 어플이나 웹사이트에서 접근가능하게 되니, 사용자들은 이 부분은 인지하고 서비스를 이용해야 한다.




728x90