OAuth2 인증에 대해서
OAuth2에 대해서 한 문장으로 정의한다면 인증 프로토콜이다. HTTP 통신 프로토콜 처럼 프로토콜이다. 프로토콜은 서로간의 약속이다. HTTP 통신을 할때 보내는 클라이언트, 받는 서버가 데이터를 주고 받을때 이러한 방식으로만 주고 받자고 약속을 해놓은 것 처럼, OAuth2 인증도 마찬가지로 인증이라는 행위를 할 때, 서로서로 우리 이런 방식으로 인증처리 권한 처리를 하자 라고 약속을 해놓은 기술이라고 할 수 있다.
OAuth2 인증 종류
OAuth2는 인증을 위한 데이터 교환을 위해서 다양한 방법을 지원한다. 그 인증 방법에 따라서 동작 흐름도 달라진다. OAuth2 인증에서는 그것을 그랜트 유형이라고 부른다. 대표적으로 OAuth2 인증에는 두가지 유형의 그랜트가 있다.
1.인가 코드 그랜트 (신뢰 클라이언트)
2.암시적 그랜트 (비신뢰 클라이언트)
언어가 영어인데다가 용어도 생소해서 잘 안와 닿을 수 있다. 쉽게 말하면 인가 코드그랜트는 백엔드 서버에서 인증 처리를하는 유형이다. 암시적 그랜트는 클라이언트에서 인증 처리를 하는 유형이다. 그래서 인가 코드 그랜트는 안전하게 정보를 저장하고 전송할 수 있기 때문에 신뢰 클라이언트라고도 한다. 반면 암시적 그랜트는 정보를 안전하게 저장하거나 전송할 수 없기 때문에 비신뢰 클라이언트라고도 한다. 한번더 언급하면 신뢰클라이언트, 비신뢰 클라이언트 차이는 정보를 안전하게 전송할 수 있느냐 없느냐하는 점이고, 정보를 안전하게 저장할 수 있냐 없냐로 판단한다.
암시적 코드 그랜트
먼저 비신뢰 클라이언트인 암시적 그랜트 유형에 대해서 살펴보자. 암시적 코드 그랜트의 동작은 단순하다. 아래 그림을 보자. 3명의 인물이 등장한다. 먼저 유저, 앱, 페이스 북이다. 유저는 굳앱에 가입해서 굳앱에 가입한 친구들을 보고싶다. 그래서 아래와 같이 유저는 인증 처리를 한다.
(1)유저가 굳앱에 페이스북 친구중에 굳앱에 가입한 친구목록을 요청을 한다.
(2)굳앱은 자기에게 인증권한이 없으니 먼저 페이스북에 접근해서 페이스북에 물어보라고 한다.
(3)굳앱은 페이스북 인증창을 띄워준다.
(4)페이스북은 굳앱에 친구리스트를 제공해도 되냐고 물어본다.
(5)유저는 승인하고 버튼을 누른다. 승인 버튼이 눌리면 페이스북은 키를 제공한다.
(이때 굳앱은 페이스북으로 전달 받은 키를 이용해서 페이스북에게 사용자의 친구 목록을 요청한다.)
(6)페이스북은 전달된 키를 확인 한 후에 굳앱에게 사용자의 친구 목록을 전달한다.
일단 사용자가 굳앱이 자신의 페이스북 친구 목록에 접근하는 것을 허락하면 페이스 북은 굳앱에게 사용자의 친구 목록에 접근할 수 있는 키를 전달 한다. 이 키를 OAuth2 인증에서는 액세스 토큰이라고 한다. 액세스 토큰은 굳앱에게 사용자의 친구 목록에 접근할 수 있는 권한이 부여됐음을 의미한다. 이 토큰에는 친구목록에만 접근할 수 있지 다른 사용자의 친구목록에는 접근 할 수 없다.
언제 암시적 그랜트를 사용하나?
암시적 그랜트는 비신뢰 클라이언트를 위해서 설계되었기 때문에 그것에 맞게 클라이언트 단에서만 사용해야 한다. 사용자의 데이터를 오랜기간 저장할 필요가 없는 순수 브라우저 기반의 애플리케이션에서 사용하면 된다.
(1)아이폰 웹뷰에서 동작하는 애플리케이션
(2)안드로이드 웹뷰에서 동작하는 애플리케이션
(3)백엔드 서버없이 동작하는 네이티브 ios 애플리케이션
(4)PC의 웹브라우저에서 동작하는 HTML/JS 애플리케이션
암시적 그랜드의 장단점
장점
단순하다. 모든 동작이 브라우저에서 일어나므로 백에드 서버나 데이터 저장이 필요하지 않다.(만약 데이터 저장을 해야 한다면 인가 그랜트 유형을 고려해야 한다.)
단점
보안이 낮다. 클라이언트에게 키가 전달되기 때문에 키가 노출될 가능성이 있다. 그리고 비신뢰 클라이언트이기 때문에 키를 장시간 저장할 수 없다. 그래서 신뢰클라이언트 보다 더 자주 인증을 받고 토큰을 재발급 받아야 한다.
정리
이번 포스팅에서는 암시적 그랜트에 대해서 알아보았다. 다음 포스팅에서는 이어서 인가 코드 그랜트에 대해서 알아보자.
'웹개발 > 보안' 카테고리의 다른 글
카카오 로그인 OAuth2.0 (0) | 2020.12.08 |
---|---|
OAuth2 인증 - 인가 코드 그랜트 (0) | 2020.12.05 |
스프링 Session 쇼핑몰 방금 본 상품&권한체크 (0) | 2020.12.05 |
스프링 Session으로 자동 로그인 구현하기 (0) | 2020.12.01 |
세션의 개념과 단점 (0) | 2020.12.01 |