
Spring Security는 애플리케이션을 위한 인증(Authentication), 권한 부여(인가, Authorization) 및 기타 보안 기능을 제공하는 프레임워크로써 Spring Security를 사용하기 전 인증과 인가에 대한 정확한 개념과 차이점을 간단하게 정리하고자 합니다.
1. 인증(Authentication)
1-1. 정의
(1) 인증(Authentication)이란, 어떤 개체의 신원을 확인하는 과정을 의미합니다.
(2) 특정한 인증 요소를 통해 자신의 신원을 확인할 수 있고 인터넷이 연결된 웹, 앱 서비스에서는 자신의 ID, PW를 입력하는 행위를 인증으로 볼 수 있습니다.
(3) 단일 인증 이후에도 여러 개의 인증 절차를 거칠 수 있습니다.
(은행과 같은 금융권 서비스의 경우 초기 본인인증 이후 OTP나 보안카드를 입력하는 등의 추가적인 절차를 진행하는 등)
2. 인가(Authorization)
2-1. 정의
(1) 인가(Authorization)란, 인증된 사용자가 어떤 리소스에 접근할 수 있는지 어떤 동작을 수행할 수 있는지 검증하는 과정을 의미합니다.
(2) 접근 권한을 얻는 과정이라고 생각할 수 있으며 인증 이후의 프로세스라고 볼 수 있습니다.
(3) 인터넷 기반 서비스에서는 토큰을 사용하고, 사용자는 토큰에 기재된 자신의 인가 정보를 통해 서버로부터 인증을 받고 서비스를 사용할 수 있게 됩니다.
3. 인증과 인가의 정확한 차이?
3-1. 정리
(1) 다시 한 번 정리해 보면 인증(Authentication)은 사용자의 신원을 확인하는 과정이고, 인가(Authorization)는 인증과 달리 권한을 부여하는 과정으로써 특정 Entity(사용자)가 리소스에 액세스할 수 있는지 확인하는 과정입니다.
(2) 정의로만 봤을 때 이 둘을 명확하게 구분할 수 있지만, 특정한 시나리오에서 어디까지가 인증이고 인가인지 명확하게 구분하는 것이 조금 어려울 수 있습니다. 위와 같은 기본적인 정의를 먼저 새겨두고 다음과 같은 차이점을 인지하고 있으면 인증과 인가를 구분하는 데 있어 도움이 될 것이라고 생각합니다.
3-2. 차이점
- 아래와 같은 세부적인 차이점이 존재합니다.
(1) 인증 → 인가로 이어질 수 있지만 인가 → 인증으로는 이어질 수 없습니다.
(2) 인증은 권한 부여 결정의 일부 요소로 사용될 수 있습니다.
(3) 권한 부여로 인증을 하기에는 유용하지 않을 수 있습니다.
- 다소 이해하기 어려울 수도 있어서 특정한 예시를 들어보겠습니다. 비행기에 탑승하기 위해 신원을 증명하는 여권을 보여준 뒤 탑승 수속을 위한 비행기 티켓까지 보여주어야 탑승을 완료할 수 있습니다. 이처럼 신원 확인 이후 특정 권한을 얻기 위한 과정으로는 매끄럽게 이어질 수 있지만 반대로 비행기 티켓만 보유하고 있는 경우 탑승자 본인임을 증명할 수 없기 때문에 수속을 정상적으로 완료할 수 없게 됩니다.
4. Reference
URL : https://auth0.com/intro-to-iam/what-is-authorization
What is Authorization? - Examples and definition - Auth0
Brush up on what authorization does for your Identity and Access Management solutions. From use cases to definitions we'll go through step by step.
auth0.com
※ 해당 포스팅에 대해 내용 추가가 필요하다고 생각되면 기존 포스팅 내용에 다른 내용이 추가될 수 있습니다.
개인적으로 공부하며 정리한 내용이기에 오타나 틀린 부분이 있을 수 있으며, 이에 대해 댓글로 알려주시면 감사하겠습니다!
댓글