인증(Authentication)과 권한 부여(Authorization)는 보안 시스템에서 사용자나 시스템이 누구인지 확인하고, 무엇을 할 수 있는지 결정하는 데 중요한 역할을 하는 개념입니다.
1. 인증 (Authentication)
- 정의: 인증은 사용자가 누구인지 확인하는 절차입니다. 쉽게 말해, 시스템에 접근하려는 사람이 "정말 그 사람인지"를 확인하는 과정입니다.
- 사용 사례:
- 로그인: 가장 흔한 인증 과정입니다. 사용자는 자신의 ID(사용자 이름)와 비밀번호를 입력하여 시스템이 본인이 맞는지 증명합니다.
- 2단계 인증(2FA): 비밀번호 외에도 추가적인 보안 요소(예: 휴대전화로 전송된 코드나 생체 인식)를 활용하여 신원을 더욱 정확하게 확인합니다.
- 싱글 사인온(SSO): 한 번의 인증으로 여러 애플리케이션이나 시스템에 접근할 수 있도록 하는 방법으로, 인증을 통합 관리하는 데 사용됩니다.
- 주요 목표:
- 신원 확인을 통해 시스템에 접근하려는 사용자가 허용된 사용자임을 확인합니다.
- 이 과정에서 사용자가 누구인지 검증하는 것에 초점을 맞추며, 이 사용자에게 어떤 권한이 있는지는 확인하지 않습니다.
인증 절차 예시:
- 사용자가 로그인 페이지에서 ID와 비밀번호를 입력합니다.
- 서버는 사용자 데이터베이스에서 입력된 ID와 비밀번호가 맞는지 확인합니다.
- 인증이 성공하면, 사용자는 시스템에 접근할 수 있게 됩니다.
2. 권한 부여 (Authorization)
- 정의: 권한 부여는 인증된 사용자가 특정 자원이나 기능에 접근할 수 있는지 결정하는 과정입니다. 즉, 인증을 통해 사용자의 신원이 확인된 후, 그 사용자가 접근할 수 있는 기능이나 자원을 제어하는 과정입니다.
- 사용 사례:
- 페이지 접근 제한: 사용자가 로그인한 후에도, 특정 페이지에 접근하려면 추가 권한이 필요할 수 있습니다(예: 관리자만 접근 가능한 페이지).
- 기능 제한: 사용자는 로그인했지만, 해당 사용자가 데이터를 수정하거나 삭제할 수 있는 권한이 있는지는 권한 부여 과정을 통해 확인합니다.
- 리소스 접근 제어: 데이터베이스에서 특정 테이블이나 열(column)에 접근할 수 있는지 확인하여, 필요한 권한이 없으면 접근을 차단합니다.
- 주요 목표:
- 접근 허용/거부: 사용자나 시스템이 특정 기능이나 데이터를 이용할 수 있는지를 결정합니다.
- 권한 부여는 사용자가 이미 인증된 상태에서 수행되며, 인증된 사용자에 대해 접근 가능한 자원 및 범위를 설정하는 데 초점이 맞춰져 있습니다.
권한 부여 절차 예시:
- 사용자가 인증 후 시스템에 접근합니다.
- 사용자가 특정 기능(예: 파일 수정)을 요청합니다.
- 서버는 사용자 권한을 확인하여, 요청한 기능에 대한 권한이 있는지 판단합니다.
- 권한이 있으면 요청한 기능을 수행하고, 권한이 없으면 거부 메시지를 표시합니다.
3. 인증과 권한 부여의 관계 및 필요성
- 인증이 완료된 후 권한 부여가 수행되는 이유:
- 인증을 통해 사용자가 누구인지 먼저 확인해야, 해당 사용자가 어떤 권한을 가지고 있는지를 확인할 수 있기 때문입니다.
- 이 과정은 시스템이 신뢰할 수 있는 사용자를 구분하여 부적절한 접근을 방지하고 보안을 강화하는 데 필수적입니다.
- 실제 예시로 이해하기:
- 은행 웹사이트: 사용자가 로그인(인증)을 통해 자신의 신원을 확인한 후, 해당 사용자가 접근할 수 있는 계좌나 서비스(권한 부여)에 맞게 화면이 표시됩니다.
- 회사 내부 시스템: 직원은 자신의 계정으로 로그인하여 시스템에 접근할 수 있지만, 예를 들어 인사팀 직원과 일반 직원이 접근할 수 있는 정보와 기능이 다르게 설정됩니다. 인사팀은 직원 정보를 열람하거나 수정할 권한이 있지만, 일반 직원은 자신의 정보만 열람 가능하도록 권한이 제한됩니다.
요약
- 인증 (Authentication): 사용자 또는 시스템의 신원을 확인하는 과정입니다. "당신이 누구입니까?"라는 질문에 대한 답을 확인하는 단계입니다.
- 권한 부여 (Authorization): 인증된 사용자가 접근할 수 있는 자원과 권한을 결정하는 과정입니다. "당신이 무엇을 할 수 있습니까?"에 대한 답을 결정하는 단계입니다.
'Springboot Study > Springboot Security' 카테고리의 다른 글
Filter (FilterChain) (0) | 2024.10.31 |
---|---|
Spring Security에서 중요한 인터페이스들 (0) | 2024.10.30 |
스레드풀 (0) | 2024.10.29 |
세션(Session)과 제이슨웹토큰(JSON Web Token) (0) | 2024.10.29 |
OAuth (1) | 2024.10.28 |