인증과 인가

최민수·2023년 4월 3일
0

CS 전공지식

목록 보기
20/36

movie

개인 프로젝트를 하다보면 로그인/회원가입 기능은 조금씩 형태는 달라도 꼭 들어가는 필수적인 기능이다.

어떤 프로젝트에서는 쿠키/세션 방법으로 구현하기도 하고, JWT 토큰을 발급 받아 사용하기도 한다. 또 스프링 시큐리티로 구현하는 방법과 시큐리티에서 제공하는 OAuth2 기술을 사용해 소셜 로그인으로 구현할 수도 있다.

인증과 인가는 사용자의 개인정보를 다루는 중요한 기술이기 때문에, 서버를 다루는 개발자로서 최소한 알아야 할 인증/보안 부분은 무엇인가 파악하고 싶었다.

그러기 위해선 옛날에는 어떤 기술을 사용했고 또 지금은 어떤 기술을 사용하는지 영상을 통해 공부해 보았다.


인증과 인가의 역사

인증 (Authentication): 사용자 신원 확인의 절차
인가 (Authorization): 사용자 권한 확인과 허가 여부의 절차

HTTP 통신 규약을 사용하는 인터넷에서의 인증/인가 방법 을 알아보자.

인터넷에서는 클라이언트와 서버가 통신하고 데이터를 주고 받을 때 Request, Response 형식의 폼을 사용한다.

예전에는 이 Request 요청 패킷에 정보를 담아 전송하고, 정보를 받아 인증하는 형식의 뚱뚱한 URL 방식을 사용했다.

하지만 이 방식의 단점은 조금만 생각해보면 알 수 있듯이 URL에 개인정보가 그대로 노출되는 치명적인 이슈가 존재한다. 또 각 URL에 해당하는 HTML을 만들어야 하기 때문에 서버의 부하가 커지게 된다. 게다가 다른 사이트로 이동하게 되면 이 정보들이 모두 사라지게 된다는 문제가 있다.

그래서 나온 방식이 IP주소를 이용한 방식이다. 서버는 TCP/HTTP 헤더를 통해서 클라이언트의 IP주소를 식별함으로써 사용자를 구별할 수 있다고 생각했기 때문이다.

그러나 이 방식에도 단점이 존재한다. 먼저, IP주소는 컴퓨터의 식별자다. 따라서 사용자가 누구인지에 따라서가 아니라 컴퓨터에 따라서 인증을 하게 된다. 또한 IP주소는 동적으로 바뀔 가능성도 존재하며 방화벽이나 프록시와 같은 기술에 따라 IP 주소를 실제로 아는 것은 어렵다.

따라서 HTTP의 기본 인증 방식은 헤더의 Authorization 헤더에 사용자에 대한 정보를 넣어 주고 받는 방식을 사용한다.

여기서 이전의 방식과 다른 구별되는 점은 이 담는 정보들을 외부로부터 안전하게 하는 방법이 추가됐다는 것이다.

쿠키와 세션을 함께 이용하는 방식, 토큰 기반 인증 방식(JWT), OAuth/OpenID를 이용한 방식이 대표적인 방법들이다.

이 영상에서는 OAuth/OpenID 기술에 대해서 자세하게 알아보았다.


OAuth/OpenID

OAuth 가 인가(Authorization)에 대한 기술, OpenID가 인증(Authentication)에 대한 기술이다.

바로 아래와 같이 우리가 자주 접하는 소셜 로그인을 가능하게 해주는 기술이다.

사용자는 수많은 서비스(구글, 카카오 등)에 대해 계정을 일일히 생성하고 기억하고 있기 힘들고, 또 클라이언트(중간 기업)의 경우 사용자의 민감 정보를 보관하는 것이 찝찝할 수 있다.

그렇기 때문에 신뢰할 수 있는 기업의 계정을 이용해 간단하고 표준적인 방법으로 보안 인가를 허용하기 위한 개방형 표준 프로토콜을 만들게 되는데 이것이 OAuth 기술이다.

Access Token을 Authorization Server 로부터 받아와 특정 리소스에 대한 접근 권한을 얻는 것이 OAuth 의 목적이었다면, OpenID 기술은 ID token을 받아와 사용자의 식별 정보를 가져오는 데 목적이 있다고 할 수 있다.

근데 OAuth 기술만으로 소셜 로그인 인증을 구현하고 실행할 수 있는데, OpenID는 왜 필요한 걸까? 궁금해졌다.

OAuth 기술은 서버의 리소스 사용 권한을 얻을 뿐, 사용자에 대한 정보를 명시적으로 제공하지 않는다고 한다. 반면 OpenId 기술은 리소스 권한을 얻지 못하고 유저 프로필에 대한 정보를 획득할 수 있다고 한다.

따라서 OAuth 기술을 사용하여 소셜 로그인을 구현할 때, OpenId 필드를 추가로 선언해 정보를 넘겨준다면 한 번의 통신으로 프로필 정보를 얻을 수 있게 되는 것이다.


영상 출처: [10분 테코톡] 토닉, 후디의 인증과 인가 - 부족사회부터 소셜로그인까지
https://www.youtube.com/watch?v=BotXDfBPvDA

profile
CS, 개발 공부기록 🌱

0개의 댓글