티스토리 뷰

SkyScanner 로그인

위 그림과 같이 앱이나 웹사이트에 로그인할 때, '구글로 로그인' 혹은 '페이스북으로 로그인'이라는 버튼을 자주 아니 매번 목격했을 것이다.

 

위와 같은 기능을 통해 사용자는 복잡하고 귀찮은 계정 생성 과정을 거치지 않고 구글, 페이스북 같은 서드파티 계정을 통해 간단하게 새로운 앱이나 서비스를 사용할 수 있게 되었다.

 

'서드파티 계정을 사용한 로그인'의 장점은 아래와 같다.

 

사용자 입장

  1. 단일 계정으로 여러 가지 서비스 사용 가능

  2. 계정, 비밀번호 파편화 없이 하나의 계정 정보만 기억하면 됨

  3. 제 3서비스 간편가입 가능

 

앱, 웹사이트 개발자 입장

  1. 복잡한 인증과정 구현 불필요

  2. 그로 인한 서비스 비용 절감

  3. 사용자 편의성 증대

 

사용자 편의성을 증대시켜줄 뿐만 아니라 서비스 비용까지 절감할 수 있는 마법 같은 기능에 대하여 좀 더 자세히 알아보도록 하자

 

 

OAuth

사용자 편의성을 증대시켜줄 뿐만 아니라 서비스 비용까지 절감할 수 있는 마법 같은 기능을 우리는 'OAuth 인증'이라 부른다

 

OAuth의 사전적 의미는 아래와 같다

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

출처 : 위키백과

 

'OAuth 인증'은 구글, 페이스북(이하 Service Provider)이 앱이나 웹사이트와 같은 제3 서비스에 자신들의 어떤 서비스나 정보에 접근할 수 있도록 허가해주는 과정이다.

 

즉, 사용자에 대한 실질적 인증은 Service Provider가 담당하며 앱이나 웹사이트는 Service Provider로부터 사용자 정보에 접근할 수 있는 권한을 받아 사용자 정보를 얻을 수 있게 되는 것이다. 

 

OAuth에 대한 자세한 설명은 네이버 D2 블로그 'OAuth와 춤을'과 NHN Toast Meetup 'OAuth 2.0 대표 취약점과 보안 고려 사항 알아보기'를 참고하기 바란다

위 문서들은 OAuth에 대한 자세한 설명과 OAuth 인증 절차를 보다 자세하게 설명하고 있다 

 

OAuth 2.0 대표 취약점과 보안 고려 사항 알아보기 : TOAST Meetup

OAuth 2.0 대표 취약점과 보안 고려 사항 알아보기

meetup.toast.com

 

 

OAuth 인증과 Access Token

OAuth 인증을 거쳐 Service Provider로 부터 접근 허가를 받은 제 3서비스는 어떻게 Service Provider의 리소스에 접근 할 수 있게되는 걸까?

 

Service Provider는 OAuth 인증 성공의 결과물로 'Access Token'을 제 3서비스에 발급한다.

 

제 3서비스에서 Service Provider의 리소스를 요청 할 때 'Access Token' 정보를 함께 포함해 요청하고 Service Provider는 해당 Access Token의 유효성을 검증해 정상적인 Access Token일때만 요청을 수락한다.

 

Access Token을 출입증에 비유할 수 있다

 

출입증을 이용해 특정 입구를 통과할 수 있는 것 처럼 Access Token을 이용해 Service Provider의 리소스에 접근 하는 것이다.

 

자 이제 생각을 해보자

 

한번 발급받은 출입증은 평생사용 가능한가? 

출입증을 다른 사람이 사용해도 되는것인가? 

출입증으로 모든 공간에 접근이 가능한가?

 

답은 No 다.

 

1.출입증에는 유효기간이 있어 기간이 만료되면 갱신 혹은 재발급을 받아야한다

2.출입증 사용은 개인이나 특정 조직에 한정되어 있어 이외의 사람이 사용하는 것을 금지한다.

3.출입증은 각 공간에 대한 접근권한을 따로 부여할 수 있어 허가받은 구역에만 출입이 가능하다.

(예를 들어, 일반 사원증으로 보안실 입구를 통과할 수 없다)

 

Access Token도 출입증과 같다.

 

1. Access Token에는 유효기간이 있어 기간 만료전 갱신하거나 만료 후 다른 Access Token을 재발급 받아야한다. (갱신에 Refresh Token이 필요함)

2. Access Token에는 제3서비스 정보가 포함되어있어 해당 서비스에서만 AccessToken을 사용할 수 있다.

3. Access Token에는 유저(로그인한 유저)로 부터 허가받은 권한 목록이 포함되어 있어, 해당 권한으로 접근 가능한 리소스만 사용할 수 있다.

 

실제 Google에서 발급한 Access Token에는 어떤 정보를 포함하는지 알아보자

 

Google의 Access Token 정보

{
    "issued_to": "532271504370-ong5eja069e8b20fvr74qs9l7kjjo6tt.apps.googleusercontent.com",
    "audience": "532271504370-irf3thlpul1n5cpvqnr9868g3eo5790k.apps.googleusercontent.com",
    "user_id": "117470807292575050213",
    "expires_in": 2906,
    "email": "rohjk93test@gmail.com",
    "email_verified": true,
    "issuer": "https://accounts.google.com",
    "issued_at": 1557657774,
    "scope":"https://www.googleapis.com/auth/youtube"
}

 

1. issued_to : 액세스 토큰의 사용자인 애플리케이션의 ID (Google APIs console의 Client ID)

2. expires_in : 토큰이 만료되기까지 남은 시간(초)

3. user_id 및 email : OAuth 인증 받은 유저 정보

4. scope : 유저가 액세스 권한을 부여한 범위 목록

 

 

내 애플리케이션에 OAuth 인증 사용하기

 

댓글