OAuth의 개념과 원리
DB의 종류를 바꾸어서 마이그레이션을 하는 과정에서 하나 발견한 JSON token을 발견했습니다.
FaceBook에서 사용하는 Token인데, 여기서 OAuth를 사용을 하는데 정확히 원리와 개념에 대해서 몰랐습니다.
그래서 정리를 한번 해보려고 합니다.
OAuth 란?
"웹, 앱 서비스에서 제한적으로 권한을 요청해 사용 할 수 있는 키를 발급해주는 것입니다."
사용하는 이유는 엄청나게 많은 각 서비스별 ID와 Password를 다 기억하고 로그인시 입력을 해야하는 경우가 생깁니다.
그런데 이 OAuth API를 사용하는 사이트는 그렇지 않습니다. 제한된 설정으로 연결하여 인증하면 그만이죠.
다음은 그 예입니다.
예를 한번 들어보겠습니다.
그런데 당황스럽게도 이 예에서 본인의 소득수준에 따라서 이해도가 달라지네요.
저도 이 개념을 공부하면서 처음 알게된 부분인데요.
자동차에는 발렛키라는게 있다고 합니다. 중저가의 차만 타본 저는 잘 이해가 안가지만,
이 발렛키는 사용할 수 있는 권한이 제한적입니다.
차량을 발렛을 하는 사람으로 가장해서 탈취하려는 시도를 막기 위해서,
트렁크를 열 수 없고, 주행거리는 1km이하로 주행되고 그 이상은 안된다고 합니다.
발렛키의 예에서 보는 것처럼 어떤 제한적으로 인증을 해서 사용이 가능하게끔 하는 역할을 하는 것이 OAuth입니다.
OAuth를 이용하면 특정 기능과 리소스에 접근 할 수 있는 인증 토큰(Access Token = 발렛키)를 발급 받을 수 있습니다.
인증 토큰으로 서비스로 접근하는데에 사용을 합니다.
OAuth의 원리와 과정
1) Resource Owner(사용자)
2) Authorization Server(인증 서버)
3) Resource Server(REST API)
4) Client
이렇게 OAuth가 네 가지의 구성으로 이루어집니다.
OAuth를 이용해서 권한을 획득하는 방법은 굉장히 다양합니다.
다음과 같이 크게 네 가지의 방법이 있습니다. 이 부분은 그냥 참고만 하고 넘어가시면 됩니다.
지금 이야기를 하려고 하는 것은 이러한 세부적인 이야기는 아니고 어떤 방식으로 돌아가는지 전체적인 부분만 보려고 합니다.
이제 OAuth를 사용해서 구성들이 어떠한 방식으로 작동하는 지에 대해서 이야기를 해보겠습니다.
위에서 언급했지만 다음 네가지의 구성이 있습니다.
1) Resource Owner(DB를 장악하고 있는 OAuth를 사용하는 사람)
2) Authorization Server(OAuth 인증 서버)
3) Resource Server(REST API Server)
4) Client(Resource를 사용하는 직접 사용자)
네가지 구성 중에 중요한 것은 Client와 Resource Owner입니다.
나머지는 그 둘 간의 보안과 사용의 제한을 걸어주는 OAuth를 위한 요소들이 뿐입니다.
이제 작동 원리에 대해서 잘근잘근? 이야기 해보겠습니다.
쉽게 이야기를 해보기 위해서 OAuth 2.0 인증방식을 가지는 FaceBook을 기준으로 설명을 해보겠습니다.
* 설명에 앞서 간단하게 Client는 본인, Resource Owner, Authorization Server, Resource Server는 Facebook 서버라고 생각합니다.
1) Client가 어떤 사이트를 이용해보려고 하는데 아이디를 FaceBook으로 가입할 수 있다는 버튼을 발견합니다.
2) 버튼을 누르면 Facebook을 로그인 창이 나옵니다. 로그인을 합니다. (이 부분이 (A), (B) 과정입니다.)
3) 로그인을 하고 나면 서버에서 승인을 받아서 (B)단계가 지났다고 생각하면 됩니다.
4) 그리고 로그인 후에, 해당사이트의 접근을 허용 할 것인가? 확인 창이 나타나게됩니다.
5) 허용을 하게 되면 해당 사이트에서 로그인 목적으로 사용할 수 있는 Access Token을 받게 됩니다.( (C), (D)과정입니다.)
6) 실제로 보면 facebook의 Access token은 다음과 같이 던져줍니다.
{
"facebook":
{
"access_token":"EAAXCfLMud8M*",
"expiration_date":"2017-01-02T07:43:09.000Z",
"id":"15037283890"
}
}
여기서 부터가 바로 발급받은 Access Token을 이용해서 서비스를 사용하는 과정( (E), (F) )입니다.
7) 이제 Access Token의 id를 가지고 access_token으로 서버의 제한된 resource(DB와 같은)을 expiration_date까지 사용할 수 있습니다.
이 과정이 끝입니다.
즉, 쉽게 이야기 하면, Facebook에게 토큰 사용요청을 해서 토큰을 받아서, 토큰을 가지고 서버에 요청하여 제한된 허용으로 사용합니다.
현재 많은 서비스들이 이 OAuth을 사용하고 있습니다. 그래서 사용자들의 편의를 돕고 있습니다.
어플리케이션에도 사용자를 쉽게 유치할 수 있습니다. 권장합니다.
이상 간단한 OAuth의 개념과 원리에 대해서 정리를 마치겠습니다.