{ Spring } Spring Security
Spring Security
Authentication (인증)
1. Basic Authentication
- 동작 방식: 사용자 이름과 비밀번호를 Base64로 인코딩하여
Authorization헤더에 포함하여 전송. - 특징:
- SSL/TLS와 함께 사용하지 않으면 안전하지 않음.
- 사용 예:
Authorization: Basic <Base64_encoded_credentials>
2. Bearer Token Authentication
- 동작 방식:
Authentication헤더에 JWT와 같은 토큰을 포함하여 전송. - 특징:
- 장점: 간단한 방식, 상태 비유지, 확장성 높음.
- 단점: 토큰이 노출될 경우 보안 위험, 토큰 관리가 어려움.
- 사용 예:
Authorization: Bearer <Token>
3. OAuth (OAuth 2.0)
- 동작 방식: 사용자가 자격을 직접 증명하지 않고, 미리 인증받아 발급된 토큰을 이용하여 API 요청.
- 특징:
- 주로 소셜 로그인 (Kakao, Naver, GitHub, Facebook 등)에서 사용.
- 토큰 기반 인증으로 안전성과 확장성이 우수.
4. API Key / Session Based Authentication
- API Key: 정적인 키를 사용하여 요청 인증.
- Session Based: 서버에서 상태를 유지하며 사용자 인증.
5. JWT (JSON Web Token)
- 정의: 클레임(claim)이라 불리는 정보를 JSON 형태로 안전하게 전송하기 위한 토큰 기반의 표준.
- 용도: 인증 및 정보 교환.
- 구조:
- Header: 토큰 타입과 알고리즘 정보 포함 (Base64Url 인코딩).
- Payload: 클레임 정보 (대상, 발행자, 만료 시간 등) 포함 (Base64Url 인코딩).
- Signature: Header, Payload와 Secret Key를 사용하여 생성된 서명.
장점
- 상태 비유지 (Stateless).
- 간단하고 자기 포함적 (Self-contained).
- 확장성 우수 (여러 서비스에서 동일 토큰 사용 가능).
단점
- 크기 문제: 클레임이 많을수록 토큰 크기 증가.
- 보안 문제: 서명만 되어 있고, 암호화되지 않음 → 민감한 정보를 포함하면 안 됨.
- 토큰 관리: 만료 시간 설정 및 갱신 관리 필요.