diff --git a/keyword/chapter10/chapter10.md b/keyword/chapter10/chapter10.md new file mode 100644 index 0000000..ff4393b --- /dev/null +++ b/keyword/chapter10/chapter10.md @@ -0,0 +1,53 @@ +## 키워드 +### Spring Security +Spring Security는 Spring 기반 애플리케이션에서 인증(Authentication)과 권한(Authorization, 인가)을 처리하고, 다양한 보안 위협으로부터 애플리케이션을 보호하는 강력한 보안 프레임워크입니다. +*** +### 인증(Authentication)과 인가(Authorization) +**인증(Authentication):** + +사용자가 누구인지 확인하는 과정입니다. 예를 들어, 로그인 시 입력한 아이디와 비밀번호가 실제로 일치하는지를 검증하거나, OAuth2, JWT 등 외부 인증 방식을 사용할 수도 있습니다. + +**권한(인가, Authorization):** + +인증된 사용자가 어떤 리소스(페이지, API 등)에 접근할 수 있는지를 결정하는 과정입니다. 예를 들어, 관리자는 모든 페이지에 접근할 수 있지만, 일반 사용자는 일부 페이지만 접근하도록 제한할 수 있습니다. +*** +### 세션과 토큰 +세션(Session)**과 토큰(Token)은 웹 애플리케이션에서 사용자의 인증 상태를 유지하고 관리하는 대표적인 방식입니다. + +**세션(Session)** + +- **정의**: + + 세션은 사용자가 로그인한 이후 서버가 해당 사용자의 인증 정보를 메모리, 데이터베이스 등 서버 측에 저장하고, 클라이언트(브라우저)에는 세션 식별자(Session ID)만을 쿠키 등에 저장해 두는 방식입니다. + +- **동작 방식**: + 1. 사용자가 로그인하면 서버가 세션을 생성하고, 고유한 세션 ID를 발급합니다. + 2. 이 세션 ID는 주로 쿠키에 저장되어 클라이언트에 전달됩니다. + 3. 이후 클라이언트의 모든 요청에는 세션 ID가 함께 전송되고, 서버는 이 ID를 통해 해당 사용자의 인증 상태와 정보를 확인합니다. + 4. 세션 정보는 서버에 저장되므로, 서버가 상태(state)를 관리합니다. +- **특징**: + - 서버가 인증 상태를 직접 관리(상태 유지, stateful). + - 서버 자원(메모리, DB 등)을 사용하여 세션 정보를 저장. + - 세션 ID 탈취 시 세션 하이재킹 등 보안 위협이 존재. + +**토큰(Token)** + +- **정의**: + + 토큰은 사용자가 인증에 성공하면 서버가 암호화된 토큰(예: JWT)을 발급하고, 이 토큰을 클라이언트가 저장하여 이후 요청마다 서버에 전달하는 방식입니다. + +- **동작 방식**: + 1. 사용자가 로그인하면 서버가 인증 정보를 확인하고, 토큰(Access Token 등)을 생성하여 클라이언트에 전달합니다. + 2. 클라이언트는 이 토큰을 로컬스토리지, 세션스토리지 등 브라우저 저장소에 보관합니다. + 3. 이후 요청마다 토큰을 HTTP 헤더(주로 Authorization 헤더)에 담아 서버에 전송합니다. + 4. 서버는 토큰의 유효성만 검증하고, 별도의 세션 상태를 저장하지 않습니다(무상태, stateless). +- **특징**: + - 서버가 인증 상태를 저장하지 않음(무상태, stateless). + - 확장성과 분산 시스템에 유리. + - 토큰이 노출되면 정보가 유출될 수 있으므로, 토큰 자체의 보안이 중요 +*** +### 액세스 토큰(Access Token)과 리프레시 토큰(Refresh Token) +**엑세스 토큰** +엑세스 토큰은 인증이 완료된 사용자가 보호된 리소스(예: API, 데이터)에 접근할 수 있도록 권한을 부여하는 자격 증명입니다. +**리프레시 토큰** +리프레시 토큰은 엑세스 토큰이 만료되었을 때, 사용자가 다시 로그인하지 않고도 새로운 엑세스 토큰을 발급받을 수 있게 해주는 특별한 토큰입니다.