새롭게 스프링 포팅 작업을 진행하면서, 인증 부분 구현을 맡게 되었습니다.
기존에는 간단하게만 이해하고 있던 부분들이었는데, 더 명확하게 짚을 필요가 있지 않을까 하는 생각이 문득 들었습니다.
현재 우리가 사용하는 인증 방식들에 대한 이해와 관련한 개념들에 대한 학습이 필요하다고 느꼈고, 이것들을 정리해보고자 합니다.
인증(Authentication)과 인가(Authorization)
는 다른 의미입니다.
**인증**은 접근할 수 있는 사용자인지 자격을 1차적으로 검증하는 것
입니다. 42의 경우에는 42 OAuth(인트라 로그인)을 통과하는 사람들이 1차적으로 우리가 제공하는 서비스에 접근할 수 있는 ‘인증된 사용자’일 것입니다.
**인가**는 접근 권한을 식별하는 것
입니다. 1차적으로 우리 서버에 접근할 수 있다고 하더라도, 권한에 따라 접근할 수 있는 리소스(정보)가 다르다면 그 권한에 따라 인가해주어야 하는 것입니다.
비행기를 예로 들어보겠습니다.
즉, 인증은 누구인지 확인하는 것이고 인가는 무엇을 할 수 있는지 알아보는 것
입니다.
그리고 이러한 인증, 인가를 웹 어플리케이션에서 구현하는 방법에는 주로 세션(Session)과 토큰(Token)을 통한 방식이 있습니다.
먼저 세션에 대해서 알아보겠습니다. 세션의 영영풀이는 다음과 같습니다.
a period of time or meeting arranged for a particular activity 특정
활동을 위해 정해진 모임
이나 기간
인증에서 세션은 인증 및 권한 부여 정보를 포함하여 사용자 데이터를 저장
하기 위한 서버측 메커니즘
입니다. 사용자가 로그인하면 서버에 세션이 생성되고, 고유한 세션 ID가 쿠키 형태로 클라이언트에 전송됩니다. 클라이언트는 각 후속 요청과 함께 이 ID를 전송하여 서버가 사용자의 세션 데이터를 검색하고 응답을 제공할 수 있도록 합니다.