반응형
LinkedIn 개발자로 성장하면서 남긴 발자취들을 확인하실 수 있습니다.
Github WWDC Student Challenge 및 Cherish, Tiramisul 등 개발한 앱들의 코드를 확인하실 수 있습니다.
개인 앱 : Cherish 내 마음을 들여다보는 시간, 체리시는 디자이너와 PM과 함께 진행 중인 1인 개발 프로젝트입니다.
10년 후, 20년 후 나는 어떤 스토리 텔러가 되어 있을지 궁금하다. 내가 만약에 아직 조금 더 탐구하고 싶은 게 있고, 궁금한 게 있다면, 그게 설사 지금 당장의 내 인생에 도움이 안 되는 것 같더라도 경험해보자. 그 경험들을 온전히 즐기며 내 것으로 만들고, 내 일에 녹여내고... 그러다보면 그 점들이 모여 나란 사람을 그려내는 선이 될 테니까.

Recent Posts
Recent Comments
Total
관리 메뉴

꿈꾸는리버리

카카오 로그인 구현 : OAuth2.0 이해하기 [그림으로 쉽게] 본문

오뚝이 개발자/iOS

카카오 로그인 구현 : OAuth2.0 이해하기 [그림으로 쉽게]

rriver2 2022. 10. 22. 22:55
반응형

 OAuth 2 이란?  

앱을 사용하다보면 앱 로그인을 카카오나 apple로 하는 경우가 발생하는데, 이런 경우가 OAuth를 사용해서 구현한 내용이다.

 

나무위키에 따르면 OAuth의 정의는 다음과 같다. 정의만으론.ㄴ.. 뭔 소린지 모르겠으니... 더 살펴보자.

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

1) 연합된 신원(federated identity)

OAuth는 어느 앱이나 웹에서 직접 회원가입을 하는 것이 아닌, 믿음직스러운 기업의 로그인을 통해 서비스를 이용할 수 있도록한다. 이 때문에 사용자는 Google 계정 하나만으로 Notion이나 LinkeIn에도 로그인이 되고, 여러 사이트들이 하나의 사용자 신원을 사용하게 된다.

2) 권한 위임(delegated authority)

OAuth을 통해서 어떤 서비스가 사용자를 대신해서 다른 서비스의 리소스에 접근할 수 있게 된다. 예를 들면 Instargram에서 구글 사용자의 연락처 리스트를 보고 그 연락처에 있는 사람들을 링크드인 친구로 등록할 것을 추천하는 등의 기능이 있다. 다시 말해, 사용자의 연락처 리스트에 접근할 수 있는 권한이 instargram에 위임된 것이다. 이를 위해서는 아래와 같이 선택 제공 항목에 여러 동의 사항들이 추가되겠지..?

 

 OAuth 2.0 을 사용하는 이유 

사용자가 카카오를 통해서 우리 앱을 로그인하고, 카카오에 있는 정보를 우리 앱에서 사용한다고 하자. 이를 위해서 정말 쉽지만 아니라고 생각되는 방법은 아마.. "사용자에게 카카오 아이디랑 비번을 받아내기" 일 것이다. 이렇게 하면 우리 앱은 사용자의 아이디와 비번을 받아서 저장해 두고 정보가 필요할 때 사용자인 척 Resource Server에 접속해서 정보를 받아올 수 있다. 하지만 보안의 수준을 알 수 없는 애플리케이션에서 값을 관리한다? 그리고 사용자의 정보에 우리앱이 모든 접급이 가능하다? 일단 믿음직스럽지 않고 개인정보가 유출되면 연쇄적으로 피해가 심각하기에 User, Client, Resource Server 측 모두 부담스러운 거래가 될 것이다.

그래서 나오게 된 방법이 Open Authorization의 약자인 OAuth2로, 보안 수준이 어느정도 검증된 사이트(ex, google, facebook, kakao)의 API를 이용해서 인증을 받는 방법을 사용한다. ( + OAuth1의 보안 이슈를 해결하면서 나온 방법이 OAuth2라고 한다. )

 

 

 

 OAuth2 동작 방식 

OAuth 인증 방식은 인증의 과정을 '타 서비스에게 위임'하는 인증방식이다. 예를 들어 내 사이트에 구글 로그인 기능을 통해 구글에게 전송한 구글 계정 정보가 유효한지 확인한 후, 유효하다면 해당하는 구글 유저 정보 중 일부를 내 사이트에 제공해 주는 '인증' 과정만 처리한다.

OAuth 동작에 관여하는 참여자는 크게 세 가지로 구분할 수 있다. 해당 개념을 알아야 과정들을 보다 쉽게 이해할 수 있다.

  • Client : Resoure Server에 접속해서 정보를 가져오고자 하는 웹, 앱
  • Resource Server : Client가 제어하고자 하는 자원을 보유하고 있는 서버 (Facebook, Google, Twitter 등)
  • Resource Owner : 자원의 소유자인 실제 유저

아래는 payco의 OAuth2 프로세스 도표 사진을 가지고 왔다. 개인적으로 카카오보다 이해가 잘돼서..

<< 위의 그림 설명 >>

1. 우선적으로 Resource server(페이코)에 Client(앱) 등록이 필요하다. 등록을 하게 되면 client ID와 client Scret가 발급된다. 

2. Client의 앱에서 Resource Owner(사용자)가 어떤 기능을 수행하기 위해 Q라는 정보가 필요하다고 하자.

3. 그러면 Client는 Resource Owner에게 기능 수행을 위해 페이코 로그인을 요구하게 된다. 

4. 이때 Resource Owner는 Client의 접근을 허용하는 값들(연락처, 이메일 등)을 체크하고 ID, password를 입력해 로그인을 하게 된다.

5, 6. Resource server는 이제 Resource Owner가 Client에게 Q정보 접근을 허용했음을 증명하는 authorization code(승인 코드)를 Client에게 보내준다. (authorization code 의미 : Resource Owner가 Client에게 Q정보 접근을 허용했음)

7. 이제 Client는 Resource server에게 Client ID와 Client secret 값과 함께 authorization code을 보내며 access token 발급 요청을 보낸다. (Client ID와 Client secret 의미 : access token을 발급하려는 게 Client임을 증명 )

8. authorization code와 접근하려는 Client가 일치하면 Resource server가 받은 값들을 확인한 후 Client에게 access token을 발급해준다. (이후 Client측에서는 access token을 저장해둠)

9. 로그인이 성공됨

10, 11, 12. Resource Owner가 Q 정보를 필요로 할 때 Client가 access token을 통해 Resource server에 정보를 요청하게 된다. 인증 받았던 access token임을 확인하면 Resource server는 Client에게 Q 정보를 보내준다.

13. 그리고 Client는 Q 정보를 가공해서 Resource Owner에게 보내준다.

 

+) Resource server는 해당 기능을 쉽게 사용할 수 있도록 SDK를 제공해준다.

 

위 글을 읽고 나면 Key point가 access token임을 알 수 있다. Resource server는 Client와 Resource Owner의 관계를 인증하고, 어떤 기능에 대한 접근인지를 확인한 이후 access token을 Client에게 줌으로써, 이후 Client에게 Q 정보를 제공하게 된다.

 

+) Refresh Token

보통 Resource Server는 Access Token을 발급할 때 Refresh Token을 함께 발급해준다. 이는  Access Token이 만료기간이 있어서 사용 가능한 기간이 끝난후에 자동적으로 Refresh Token을 보내 새로운 Access Token을 발급받게 되어 로그인 인증을 유지 할 수 있게 하기 위함이다


❇︎틀린 거나 첨언할 내용이 있다면 언제든 알려주세요 :)

반응형
Comments