개요

새롭게 스프링 포팅 작업을 진행하면서, 인증 부분 구현을 맡게 되었습니다.

기존에는 간단하게만 이해하고 있던 부분들이었는데, 더 명확하게 짚을 필요가 있지 않을까 하는 생각이 문득 들었습니다.

현재 우리가 사용하는 인증 방식들에 대한 이해와 관련한 개념들에 대한 학습이 필요하다고 느꼈고, 이것들을 정리해보고자 합니다.


인증과 인가

인증(Authentication)과 인가(Authorization)는 다른 의미입니다.

**인증**은 접근할 수 있는 사용자인지 자격을 1차적으로 검증하는 것입니다. 42의 경우에는 42 OAuth(인트라 로그인)을 통과하는 사람들이 1차적으로 우리가 제공하는 서비스에 접근할 수 있는 ‘인증된 사용자’일 것입니다.

**인가**는 접근 권한을 식별하는 것입니다. 1차적으로 우리 서버에 접근할 수 있다고 하더라도, 권한에 따라 접근할 수 있는 리소스(정보)가 다르다면 그 권한에 따라 인가해주어야 하는 것입니다.

비행기를 예로 들어보겠습니다.

즉, 인증은 누구인지 확인하는 것이고 인가는 무엇을 할 수 있는지 알아보는 것입니다.

그리고 이러한 인증, 인가를 웹 어플리케이션에서 구현하는 방법에는 주로 세션(Session)과 토큰(Token)을 통한 방식이 있습니다.


세션

먼저 세션에 대해서 알아보겠습니다. 세션의 영영풀이는 다음과 같습니다.

a period of time or meeting arranged for a particular activity 특정 활동을 위해 정해진 모임이나 기간

인증에서 세션은 인증 및 권한 부여 정보를 포함하여 사용자 데이터를 저장하기 위한 서버측 메커니즘입니다. 사용자가 로그인하면 서버에 세션이 생성되고, 고유한 세션 ID가 쿠키 형태로 클라이언트에 전송됩니다. 클라이언트는 각 후속 요청과 함께 이 ID를 전송하여 서버가 사용자의 세션 데이터를 검색하고 응답을 제공할 수 있도록 합니다.