본문 바로가기
개발 이야기/Etc

OAuth2.0에 대해서 이것만은 알고 가자

by 농개 2019. 3. 4.
반응형

OAuth2.0 이란 Open Authentication, Authorization의 약자로 인증/인가에 대한 표준프로토콜이다.

흔히 웹브라우저를 통해서 쇼핑몰 사이트, 이벤트 사이트 등을 접속하여 어떤 작업을 하려고 하면 인증에 대한 요구에 직면하게 되고

요즘 sns를 통해서 인증을 대체하기도 한다. 



이미 기기에서 로그인을 한 상태라면 위의 그림에서 보이는 "xx로 로그인" 버튼 클릭만으로 인증을 받을 수 있다.

저런걸 OAuth2.0라고 말하는건 아니다. 저건 단순히 특정 사이트에서 네이버, 페이스북, 구글 등의 Open API를 사용 한 것이고

대부분의 Open API 제공 서비스는 OAuth2.0 형태로 인증서버와 리소스 서버를 따로 구성해서 제공할 것이다.



만약 네이버, 페이스북 등과 같이 api를 제공하는 서버를 구축하고, 인증/인가에 대한 기능을 OAuth2.0으로 구축한다면

각 방식에 대해서 장단점을 파악해야 할 것이다. 아래는 API key 방식, OAuth2.0 방식에 대한 장단점을 기술한다.



01. API Key 

전통적인 인증/인가 방법이다.
클라이언트는 리소스 접근을 위해서 API key 와 함께 요청을 보내고
서버는 API key를 DB의 인증저장소의 것과 비교해서 클라이언트에게 권한을 주는 방식이다.
인증서버를 구축하는 개발자, API를 사용하는 개발자 모두 매우 간단하게 개발을 진행 할 수 있다.
하지만 API key는 통신구간에서 유출될 것을 대비해야될 것이며, 주기적인 업데이트가 필요 할 수 있다.
또한 ACL, 가령 허가된 IP관리 등을 하지 않으면 보안문제로 이어 질 수 있다.
허가된 IP 관리라... 이는 요즘 대세인 클라우드에 적합하지 않다.(Auto scailing에 부적합)






02. OAuth2.0 

02-1 프로토콜 구현

OAuth2.0는 아래의 프로토콜을 구현하면 된다.


1. app(service)가 사용자에게 인증요청

2. 사용자가 app(service)에게 인증정보(아이디/password)를 입력

3. app(service)는 인증서버에 인증정보 전달

4. 인증서버는 access token 부여

5. app(service)는 리소스서버에 access token 전달

6. 리소스서버는 보호된 리소스를 app(service)에 전달



쇼핑몰사이트가 OpenAPI를 사용한다고 가정해보자.

app(service)는 쇼핑몰 사이트가 될 것이다.

인증서버는 OAuth2.0 프로토콜을 구현한 OpenAPI 제공 서버이고 인증 기능을 담당한다.

리소스서버는 사용자에 대한 정보를 가지고 있는 주체가 될 것이며, 인증서버와 같은 곳에 위치할 것이다.(예를들어 네이버 서버에 인증서버와 리소스서버가 있다)



02-2 OAuth2.0

OAuth2.0은 인증서버를 따로 두어서 실제 리소스 접근에 필요한 token을 발급한다. 이를 Access Token이라한다.
Access Token은 의미없는 문자열이기 때문에 인증을 할때 db접근이든, 뭐든 해서 접근의 유효성을 확인하게 된다.
클라이언트와 서버간의 전달이 아닌 Redirect를 통해 서버간의 흐름이 되기 때문에 API key 방식에 비해 Access Token이 다른곳으로 셀 가능성이 줄어든다.
하지만 API를 사용하는 서비스도 Redirect를 통한 작업을 직접 개발해야하는 단점이 있다.




참고: https://www.sauru.so/blog/basic-of-oauth2-and-jwt/



















반응형

'개발 이야기 > Etc' 카테고리의 다른 글

2019 Log  (0) 2020.01.03
VSCode 확장 추천!!!  (0) 2019.11.27
Elastic{ON} 서울 투어 2/22  (0) 2019.02.22
2018 Log  (0) 2018.12.30
[독서]애자일 & 스크럼 프로젝트 관리  (0) 2018.10.03