서버 개발에서 가장 기본적 보안은 인증(authentication)과 인가(authorization)이다.
인증은 사용자가 누구인지 확인 하는 과정
인가는 사용자에게 자원에 접근할 수 있는 권한을 부여
인증과 토큰
아이디와 암호를 입력하는 로그인은 인증의 한 형태. 보안 강화 위해 2단계 인증(Two-Factor Authentication, 2FA) 을 쓰기도함.
사용자가 누구인지 확인되면 서버는 클라에 문자열로된 토큰 제공.
클라는 이후 각 요청마다 이 토큰 함께보내 자신이 누구인지 증명함. 서버는 사용자 인증이 필요한 기능에 대해 매번 아이디와 암호를 입력받지 않고, 토큰 사용해서 사용자를 식별.
인가와 접근 제어 모델
인증과 토큰이 사용자가 누구고 정상적으로 접근하는지 확인하는 역할이라면, 인가는 사용자가 요청한 기능을 권한이 있는지 확인하는 역할을 함.
접근 제어의 기본은 접근한 사용자를 토큰이나 세션으로 식별하는 것.
사용자가 접근할 수 있는 기능(또는 자원)을 관리하기 위한 모델을 접근 제어(Access Control)모델 이라 한다. 대표적인 접근 제어 모델로는 역할 기반 접근 제어(Role-Based Access Model)이 있음. RBAC은 역할별로 실행가능한 기능 집합 할당하고, 사용자에게는 이 역할을 부여함.
역할은 허용된 기능 집합 가진다.
사용자에게는 역할을 부여한다.