📝 테이블 생성
use sbtest;
create table user_list (
name varchar(20) primary key,
password varchar(100),
authority varchar(20),
enabled int
);
insert into user_list values
('user', 'abcd', 'ROLE_USER', 1),
('admin', 'abcd', 'ROLE_ADMIN', 2);
📝 인증, 인가
1. 인증 (Authentication)
인증은 사용자가 누구인지 확인하는 과정입니다. 이는 사용자가 주장하는 정체성을 확인하는 절차로, 보통 사용자명과 비밀번호, 또는 다른 형태의 자격 증명(예: 생체 인식, OTP 등)을 통해 이루어집니다.
- 목적: 사용자가 시스템에 접근하려고 할 때, 그 사용자가 실제로 누구인지 확인하는 것.
- 방법:
- 비밀번호: 가장 일반적인 방법으로, 사용자가 제공한 비밀번호를 서버에 저장된 해시된 비밀번호와 비교합니다.
- 2단계 인증: 비밀번호 외에 추가적인 인증 요소(예: SMS 코드, 이메일 코드)를 요구합니다.
- 생체 인식: 지문, 얼굴 인식, 홍채 인식 등 신체적 특성을 사용하여 인증합니다.
- OAuth, SAML, OpenID Connect: 소셜 로그인이나 외부 인증 서비스 제공자를 사용한 인증.
- 결과: 인증이 성공하면 사용자는 시스템에 접근할 수 있으며, 이는 시스템이 사용자를 인식하고 있다고 간주합니다. 이 시점에서는 시스템이 사용자의 신원을 확인했을 뿐, 사용자가 어떤 작업을 할 수 있는지에 대해서는 아직 결정되지 않은 상태입니다.
2. 인가 (Authorization)
인가는 인증된 사용자가 시스템에서 어떤 권한을 가질 수 있는지를 결정하는 과정입니다. 이는 사용자가 특정 자원에 접근하거나, 특정 작업을 수행할 수 있는지를 결정하는 절차입니다.
- 목적: 사용자에게 부여된 권한을 기반으로, 그 사용자가 어떤 자원에 접근할 수 있고 어떤 작업을 수행할 수 있는지 결정하는 것.
- 방법:
- 역할 기반 접근 제어(RBAC): 사용자가 속한 역할에 따라 권한을 부여합니다. 예: 관리자, 사용자, 손님 등.
- 권한 기반 접근 제어(ABAC): 사용자의 속성, 자원의 속성, 환경 조건에 따라 세부적인 접근 권한을 부여합니다.
- ACL(Access Control List): 특정 파일이나 자원에 대한 접근 권한을 정의합니다. 예: 파일 시스템에서의 읽기, 쓰기, 실행 권한.
- OAuth 스코프: API 접근에 사용되는 OAuth 토큰에서 정의된 스코프에 따라 접근 권한을 결정합니다.
- 결과: 인가가 성공하면 사용자는 자신이 허용된 작업이나 자원에 접근할 수 있습니다. 예를 들어, 한 사용자는 특정 파일을 읽을 수 있지만 쓸 수는 없을 수 있으며, 다른 사용자는 해당 파일에 대해 읽기와 쓰기 권한 모두를 가질 수 있습니다.
인증과 인가의 차이점
- 순서: 인증은 먼저 수행되고, 그 다음에 인가가 수행됩니다. 즉, 시스템은 먼저 사용자가 누구인지를 확인하고, 이후 그 사용자가 어떤 일을 할 수 있는지 결정합니다.
- 목적: 인증은 "당신이 누구인가?"를 묻는 것이고, 인가는 "당신이 무엇을 할 수 있는가?"를 묻는 것입니다.
- 결과: 인증이 성공하면 사용자는 시스템에 로그인할 수 있습니다. 인가가 성공하면 사용자는 특정 자원이나 기능에 접근할 수 있습니다.