한 걸음 두 걸음

OAuth2.0 개념, 동작방식, 특징에 대해 알아보자! 본문

FrontEnd/Android

OAuth2.0 개념, 동작방식, 특징에 대해 알아보자!

언제나 변함없이 2019. 9. 14. 13:14
반응형

 

 

0. 필요성

OAuth는 흔히 볼 수 있는 구글로 로그인하기, 페이스북 로그인 하기 등으로 볼 수 있는 API입니다. 이를 활용하면 로그인 과정에서 요구되는 세션관리 및 개발 비용과 운영 비용을 줄일 수 있습니다


1. Oauth2.0 개념

Open Authorization
제 3의 앱이 자원의 소유자인 서비스 이용자를 대신하여 서비스를 요청할 수 있도록 자원 접근 권한을 위임하는 방법으로, 인증을 위한 오픈 스탠더드 프로토콜입니다.

OAuth 1.0에서 웹 애플리케이션이 아닌 애플리케이션에서는 사용하기 곤란하다는단점을 보완하여 OAuth 2.0가 나타났고, 보안 강화를 위해 Access Token의 Life-time을 지정하여 사용합니다.

인터넷 서비스 기업 OAuth 버전
Facebook 2.0
Foursquare 2.0
Google 2.0
Microsoft (Hotmail, Messenger, Xbox) 2.0
LinkedIn 2.0
Daum(티스토리 2.0
NHN (오픈API) 1.0a
Daum(요즘, 오픈API) 1.0a
MySpace 1.0a
Netflix 1.0a
트위터 1.0a
Vimeo 1.0a
Yahoo!

 

용어 설명
User Service Provider에 계정을 가지고 있으면서, Consumer를 이용하려는 사용자
Service Provider OAuth를 사용하는 Open API를 제공하는 서비스
Consumer OAuth 인증을 사용해 Service Provider의 기능을 사용하려는 애플리케이션이나 웹 서비스
Request Token Consumer가 Service Provider에게 접근 권한을 인증받기 위해 사용하는 값. 인증이 완료된 후에는 Access Token으로 교환한다.
Access Token

2. Oauth 동작방식

 

 

OAuth의 주체는 3가지로 이루어져 있습니다.
Resource owner(사용자) - client(Wep/App) - resource server(제공자 : google, facebook, kakao, naver etc)

  1. client는 resoure server에 oauth 사용 요청을 합니다.

  2. 그러면 resource server는 client ID와 client secret 정보를 줍니다.

    여기서 어떤 infomation만 요청할 것인지 scope를 지정해주는 것이 좋습니다.(해당 API에 등록시킵니다. 예, 캘린더)

  3. 이를 바탕으로 클라이언트에 client Oauth를 붙이고나면 사용자가 이를 클릭할 수 있습니다.

  4. resource owner가 client에 접속을 하여 Oauth 로그인을 누르면 client에서 어떤 정보가 필요하고 이를 승인해줄것인지 묻습니다.

  5. 승인 버튼을 누르면 owner는 server로 접속하여 해당 server에 로그인을 하고 정보를 제공하는 것을 허락할 것인지 묻습니다.

  6. 승인이 완료되면 server는 client에게 code(비밀번호)를 제공합니다.

  7. client는 code값과 id, secret값을 다시 server로 보냅니다.(허락받은 client가 맞는지 확인합니다.)

  8. 그럼 server는 access token을 client에게 발급합니다. (client는 이를 소중하게 잘 보관해놓습니다.)

    이 때, 최초로 발급된 access token response에 refresh token이 함께 전송됩니다. access token은 만료시간(약 1시간)이 지나면 동작하지 않으므로, 반드시 refresh token을 활용하여 주기적으로 업데이트되는 access token을 받아와서 resource server에 data 요청을 해야합니다.(Revoking token) 만약, 리프레시토큰을 받지 못했을 경우 사용자가 직접 연결된 OAuth 목록에서 지워 재설정할 수 있습니다.

    refresh token은 access type을 offline으로 설정했을 때만 해당되어 발급됩니다.
    refresh token은 그러므로 소중히 어디 유출되지 않게 보관해두어야합니다.
    refresh token을 담아 post요청을 하면 요청할 때마다 새로운 access token을 받아올 수 있게 됩니다.
    android에서 getAccesstoken 혹은 refreshToken이 있는지 함수를 잘 확인해보고 가져와서 활용하도록 합시다 ㅎㅎ

  9. 이제 client는 access token을 통해 resource server에 사전 승인된 정보를 언제든지 얻을 수 있게 됩니다.

    공식문서를 가면 data를 요청하는 url파라미터 양식이 있습니다.
    GET

    = {토큰 키} 를 통해 데에터를 받아옵니다.
    json 형식으로 데이터가 날아옵니다.

  10. owner의 정보를 받아온 client는 이를 활용하여 owner에게 service를 제공할 수 있게 됩니다.
    (google calender : 사용자의 일정 정보를 가져와서 client에게 제공합니다.)

3. Oauth 특징과 기능

  • 보안이 철저하게 보장된다.
  • 대신 그 절차가 복잡하다.(이용하기 어렵다.)

웹 애플리케이션이 아닌 애플리케이션 지원 강화
암호화가 필요 없음 HTTPS를 사용하고 HMAC을 사용하지 않는다.
Siganature 단순화 정렬과 URL 인코딩이 필요 없다.
Access Token 갱신 OAuth 1.0에서 Access Token을 받으면 Access Token을 계속 사용할 수 있었다. 트위터의 경우에는 Access Token을 만료시키지 않는다. OAuth 2.0에서는 보안 강화를 위해 Access Token의 Life-time을 지정할 수 있도록 했다.


Firebase란 구글에서 인수한 모바일 및 웹 애플리케이션 개발 플랫폼입니다.
이를 사용하면 서버 관리를 구글에서 해주기 때문에 편리하고, Firebase 하나만으로도 앱 하나를 만들 수 있습니다.
이러한 Firebase에서 제공되는 Firebase 서비스 중 하나인 Authentication는 앱에서 사용자 인증 시 필요한 백엔드 서비스와 사용하기 쉬운 SDK, 기성 UI를 제공하는 라이브러리입니다.
예를 들어, Firebase Authentication를 이용해 Firebase를 안드로이드 스튜디오에 연결하고 Google 로그인을 통해 앱에서 사용자의 신원 정보 등을 얻을 수 있습니다.


레퍼런스

  1. 생활코딩 이러닝
    https://opentutorials.org/course/2473/16571

   2. 금융 보안원file:///C:/Users/HANPINETREE/Downloads/OAuth%202_0%20%EA%B0%9C%EC%9A%94%20%EB%B0%8F%20%EB%B3%B4%EC%95%88%20%EA%B3%A0%EB%A0%A4%EC%82%AC%ED%95%AD_FN.pdf

 

 

반응형