ASP.NET 8 - 쿠키 인증 구현 가이드
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
- *ASP.NET Core 웹 애플리케이션 개발자** (중간 수준)
- 쿠키 인증 시스템 구축 및 보안 설정에 관심 있는 개발자
- 사용자 인증/인가 로직을 구현하는 데 도움이 필요함
- HTTP 보안 프로토콜(예: HttpOnly, SecurePolicy) 이해 필요
핵심 요약
- 쿠키 인증 설정:
AddAuthentication
을 통해CookieAuthenticationDefaults
기반 인증을 활성화하고HttpOnly
,SecurePolicy
,SameSite
옵션으로 보안 강화 - 사용자 역할 관리:
ClaimsIdentity
에 사용자 이름, 이메일, 역할 정보를 포함하여Authorize
어트리뷰트로 역할 기반 인가 적용 - 쿠키 세션 관리:
ExpireTimeSpan
과SlidingExpiration
을 통해 쿠키 유효 기간 및 자동 갱신 기능 설정
섹션별 세부 요약
1. 사용자 모델 구성
User
엔티티에Email
을 유니크 인덱스로 설정하여 중복 등록 방지UserRoles
관계를Dictionary
타입의 중개 테이블로 다대다 관계 매핑UserRepository
에서 이메일 기반 사용자 조회 및 역할 포함 처리
2. 로그인 서비스 구현
LoginService
에서 입력 이메일로 사용자 검색 후 비밀번호 검증 수행TResult
타입을 통해 에러 메시지 및 로그인 성공 여부 반환GetByEmail
메서드에서Include(x => x.Roles)
로 역할 정보 포함
3. 쿠키 인증 설정
Program.cs
에서AddCookie
옵션 설정:
- HttpOnly = true
: XSS 방어
- SecurePolicy = Always
: HTTPS 강제
- SameSite = Strict
: CSRF 방어
- ExpireTimeSpan = 5분
, SlidingExpiration = true
: 세션 자동 갱신
OnRedirectToLogin
이벤트로 인증 실패 시 401 상태 코드 반환
4. 쿠키 생성 서비스
CookieService
에서 사용자 정보를Claim
객체로 변환ClaimsIdentity
생성 시CookieAuthenticationDefaults.AuthenticationScheme
지정AuthenticationProperties
로 쿠키 유효 기간 및 재발급 옵션 설정
5. 인증 컨트롤러 구현
AuthController
에서Login
액션:
- LoginService
로 사용자 인증 후 CookieService
로 쿠키 생성
- HttpContext.SignInAsync
로 사용자 인증 상태 설정
Logout
액션:SignOutAsync
로 쿠키 삭제 및 로그아웃 처리AccessDenied
경로: 인가 실패 시 401 응답 반환
6. 보호된 엔드포인트
[Authorize(Roles = "User/Manager/Admin")]
어트리뷰트로 역할 기반 접근 제어swagger
에서 인증 성공 시 쿠키 정보 확인 가능 (브라우저 개발자 도구 활용)
결론
- 보안 강화:
HttpOnly
,SecurePolicy
,SameSite
옵션을 반드시 적용하여 XSS 및 CSRF 공격 방어 - 쿠키 설정 최적화:
SlidingExpiration
을 사용해 사용자 경험 향상 - 역할 기반 인가:
ClaimsIdentity
와Authorize
어트리뷰트를 통해 세분화된 접근 제어 실현 - 테스트 환경: 로컬 개발 시
localhost
는 HTTPS 강제 설정을 우회하지만, 실제 배포 시 반드시 HTTPS 적용 필수