인증과 인가는 보안 이외에도 여러 이론들이 함께 어우러져 현재와 같은 기술들이 만들어졌다고 생각합니다.
단순히 인증을 하는 것을 넘어 서버에도 최소한의 자원을 사용하면서 동시에, 보안성도 우수해야 하며 확장성까지 고려해야하기 때문입니다.
서비스를 운영하면서 겪었던 여러 단점들을 보완하여 만들어진 다양한 인증 기술들이 존재합니다.
이중에서도 Web
생태계에서 가장 많이 사용되고 있던 3가지의 방식을 정리해보았습니다.
인증과 인가에 대한 정의
HTTP를 사용한 기본적인 인증 과정
Session + Cookie 방식
Token 방식
OAuth 방식
인증 : (식별가능한 정보로) 서비스에 등록된 유저의 신분을 입증하는 과정
회사에 들어가기 위해서는 이 회사의 사원임을 입증할 수 있는 사원 출입증
이 필요합니다.
모든 사람이 출입할 수 있다면 회사 망하는 지름길입니다.
이처럼 인증
은 데이터의 보안 등을 위해 꼭 필요한 절차입니다.
인가 : 인증된 사용자에 대한 자원 접근 확인
한 건물 내에 여러 다른 회사들이 모여있는 경우가 대부분이며,
회사에서도 사원, 대리, 과장 등 여러 직급이 존재하고 있습니다.
만일 인가
과정이 없다면 사원 출입증
하나로 모든 회사를 자유자재로 오갈 수 있을 것이며
이는 치명적인 정보 유출로 이어질 수 있습니다.
또한 사원 직급을 가진 임원이 특정 직급만 열람가능한 기밀 데이터를 볼 수 있게 되면 어떻게 될까요?
이처럼 인증
과정이 있으면 인가
과정도 함께 존재해야 합니다.
이를 Web
에서는 어떻게 이루어지고 있을까요?
Web
내의 모든 인증과 인가 과정은 HTTP 프로토콜 내에서 이루어지기 때문에
기본적으로 어떻게 HTTP가 인증 과정을 거치는지를 알 필요가 있습니다.
HTTP는 URL
상에서 @
앞에 이렇게 Key:Value
형식으로 ID와 PW를 보낼 수 있습니다.
하지만 이는 URL에 직관적으로 정보가 노출이 되기 때문에 위험한 방식입니다.
HTTP Request Header
Authorization: Basic aHllb2s6cXdlcjEyMw==
그래서 HTTP의 Header
중 Authorization
부분에 이 정보를 실어서 보내게 되는데요
이때, Key:Value로 이루어진 ID, PW 정보를 Base64
방식으로 Encoding
하여 실어보내게 됩니다.
그래서 이를 받은 서버는 해당 정보가 맞는지 DB와 통신하여 비교한 후 맞다면 맞다고 Response를 보내옵니다.
사용자가 매번 로그인(인증) 과정을 거쳐하 하는 문제가 있습니다.
게시물 작성 버튼을 클릭한다거나 이미지를 등록하는 버튼을 클릭한다거나 등등 웹 상에서 인증 이후에 진행되는 HTTP 통신이 이루어지는 모든 행위들은 매번 ID와 PW를 직접 입력해야 하는 인증 과정을 거쳐야 합니다. 같은 행위의 반복은 자원의 낭비를 가져옵니다. HTTP의 stateless
의 단점을 보여주는 예시라고 생각합니다.
인증은 stateful
하게 설계되어야 위와 같은 반복적인 인증과정이 사라지게 됩니다. 어떻게 설계하면 될까요?
브라우저의 Storage인 Cookie와 서버의 인증정보인 Session을 같이 기용하는 방식입니다.
Cookie는 브라우저에 내장된 저장소입니다.
사용자의 사이트를 방문하게 되면 데이터를 저장하게 되는데
내가 들고 다니면서 Cookie 데이터를 직접 수정할 수 있습니다.
Session은 서버에서 관리하는 인증 정보들의 모임입니다.
아무 문자열을 섞어 만들어서 보안성을 높였고, 만료 기간이 존재하기 때문에 쉽게 가져갈 수 없습니다.
생횔코딩 - OAuth2.0
https://www.youtube.com/playlist?list=PLuHgQVnccGMA4guyznDlykFJh28_R08Q-
우아한 테크코스 - 토니의 인증과 인가
https://www.youtube.com/watch?v=y0xMXlOAfss&ab_channel=%EC%9A%B0%EC%95%84%ED%95%9CTech
우아한 테크코스 - 루피의 인증과 인가
https://www.youtube.com/watch?v=JZgD8aPkHSc&ab_channel=%EC%9A%B0%EC%95%84%ED%95%9CTech
우아한 테크코스 - 연로그의 쿠키 vs 세션 vs 토큰 vs 캐시
https://www.youtube.com/watch?v=gA1KsJ2ak10&ab_channel=%EC%9A%B0%EC%95%84%ED%95%9CTech
우아한 테크코스 - 토닉, 후디의 인증과 인가 - 부족사회부터 소셜로그인까지
https://www.youtube.com/watch?v=BotXDfBPvDA&ab_channel=%EC%9A%B0%EC%95%84%ED%95%9CTech