인증과 인가
- 인증 (Authentication) : 유저가 누구인지 확인하는 절차
- 인가 (Authorization) : 인증이 끝난 사용자에게 무엇을 할 수 있는지를 판단해 허용하는 절차
인증 방식
세션 기반 인증(Session-based Authentication)
- 서버가 로그인한 사용자의 정보를 세션에 저장
- 클라이언트는 세션 ID가 담긴 쿠키를 이용해 서버에 요청
- 서버는 해당 세션 ID로 인증된 사용자인지 확인
| 장점 | 단점 |
|
|
토큰 기반 인증(Token-based Authentication) → JWT
- 사용자 로그인 후 서버가 인증을 확인
- 클라이언트에게 암호화된 토큰을 발급
| 무상태성 (Stateless) |
확장성 (Scalability) |
무결성 (Integrity) |
|
|
|
JWT 구조
Header.Payload.Signature
| Header | 타입과 알고리즘 명시 (ex. HS256) |
| Payload | 실제 정보 (ex. email, userId 등) → 최소한의 정보만 담는 것을 권장 |
| Signature | 서버 비밀키로 서명된 값, 위변조 여부 검증용 |
Payload는 Base64 인코딩 되어 있어 누구나 읽을 수 있음. 따라서 민감한 정보는 절대 넣으면 안 됨 !
JWT 인증 절차
- 사용자 로그인 요청
- 서버에서 사용자 정보 인증 후 JWT 생성
- 클라이언트가 JWT 저장 (ex. 쿠키, 로컬 스토리지)
- 이후 요청 시 JWT 첨부
- 서버는 JWT 검증 후, 사용자 권한 확인 및 리소스 제공

JWT 적용 시 고려사항
- Access Token과 Refresh Token 분리
- Access Token : 짧은 유효기간 (ex. 15분)
- Refresh Token : 긴 유효기간 (ex. 2주) → 재발급 전용
- Refresh Token 탈취 방지를 위해 Redis에 저장하고, 로그아웃 시 폐기
- Refresh Token 보안 강화 전략
- 1회 사용 후 무효화 (Rotate 방식)
- IP / 디바이스 정보 기록 후 요청과 비교
- 비정상 패턴 감지 : 짧은 시간에 여러 요청이 발생하는 경우 블랙리스트 처리
OAuth (Open Authorization)
- 사용자가 다른 웹 사이트 또는 애플리케이션에 대한 접근 권한을 부여하는 개방형 표준 프로토콜
- 제3자 서비스에 대한 인가를 제공
- 로그인 없이 서비스 기능을 사용
- 액세스 토큰 발급에 사용하여 권한 부여를 관리
'📚 Study' 카테고리의 다른 글
| @IdClass vs @EmbeddedId : JPA 복합 키 매핑 정리 (2) | 2025.08.05 |
|---|
