본문 바로가기

IT Knowledge

[토큰 기반 인증] OAuth 2.0


[토큰 기반 인증] OAuth 2.0



1. OAuth란

: 인터넷 사용자들이 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 개방형 표준(RFC 6479)이다.


2. 배경

: 기존의 웹사이트 및 어플리케이션 간의 인증/권한 표준화가 없었음


3. OAuth와 로그인의 차이

- 로그인: 회사 직원이 본인의 회사에 출입하는 것

- OAuth: 외부인이 회사 직원에게 요청해 방문증을 수령한 후 회사에 출입하는 것

방문증의 경우 출입이 제한되는 구역을 설정할 수 있다.


4. 용어 정리

- 사용자 (User = Resource Owner) : 서비스를 이용하는 사람들

- 클라이언트 (Client = x사이트) : OAuth를 이용하기 위한 대상 사이트

client_id : 인증 서버에서 어떤 사이트에서 OAuth 토큰을 요청 했는지 확인하는 값 (Client 고유값)


※ OAuth 공식 홈페이지에서는 Resource Owner와 Client로 정의를 하지만 한국어로 번역되는 과정에서 사용자와 클라이언트로 개념 혼동이 올수 있어 별도 구분지어 정의함



5. OAuth 프로세스


[그림 1] A사이트(junshae.com)에서 OAuth를 이용한 페이스북 로그인 인증 사용 예



6. 설계 시 보안 고려사항

  • OAuth 토큰 안전성 (Access / Refresh / Authorize code)

: OAuth 인증을 하기 위해 사용되는 Authorizatioin code 및 Access Token에 대한 안전성 (재사용 / 파기 / 횟수제한 / 만료시간)을 고려해야 한다.

  • OAuth Scope 설정
: 인증 서버는 인증을 요청한 클라이언트 및 사용자에게 토큰에 대한 사용 범위를 제한 해야한다. 
Scope를 지정해주지 않을 경우 클라이언트 및 사용자의 서비스 이용해 대한 권한 상승 가능성이 존재한다.
ex) 인가되지 않은 클라이언트 : 최소한의 Token 발행 / Resource Owner : 리소스 소유자 별 Token 발행 / 특정 서비스 : 서비스 별 토큰 발행 / 정책 : 정책별 토큰 발행
  • OAuth 토큰 발급/처리 시 Resource Owner 알림 설정
: 인증 처리 서버 및 클라이언트에서의 사용자에 대한 인증 정보 처리 시 어떠한 정보를 이용하는지에 대한 고지 해야한다.
ex) xxx 사이트에서 A 사용자가 페이스북을 이용해 회원가입을 할 경우 페이스북에서 xxx 사이트에게 제공하는 정보 및 xxx 사이트에서 A사용자에 대한 어떠한 정보를 사용할지에 대한 이메일, 동의 페이지, 사용자 약관, SMS 고지 여부
  • 특정 Resource Server Token 사용 가능성
: 인증 서버는 다양한 서비스들에게 각각의 서로 다른 토큰을 발급하는지 여부를 확인해야 한다.
ex) A 사이트에서 발급 받은 Token이 B사이트에서 사용되는 경우 (A와 B는 서로 연관이 없는 사이트이다.)
  • CallBack URL (redirect URL 검증)
: CSRF (Cross Site Request Forgery) 등의 OAuth 토큰이 통신구간에서 조작될 가능성이 있는지
  • 통신구간 안전성 (SSL/TLS) 적용
: OAuth 토큰의 경우 주요정보 (사용자 인증 값)를 포함하고 있어 SSL / TLS 등의 암호화 프로토콜에서의 사용이 되어야 한다.
  • OAuth 토큰 처리 시 Client(client_id) 확인
: OAuth를 이용한 토큰 발급/처리 시 모든 토큰에 대하여 client_id를 확인하여 토큰 변조에 대한 체크를 확인해야 한다.
  • OAuth 토큰 발급 시 안전한 암호 알고리즘 사용
: 토큰 값은 인증 서버에서 암호화 적으로 강한 랜덤 또는 의사 난수 시퀀스(RFC 1750)로 구성되어 공격자로부터의 추측 및 복호화가 되지 않도록 해야한다.