AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

ASP.NET 8 - 쿠키 인증 구현 가이드

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

웹 개발

대상자

  • *ASP.NET Core 웹 애플리케이션 개발자** (중간 수준)

- 쿠키 인증 시스템 구축 및 보안 설정에 관심 있는 개발자

- 사용자 인증/인가 로직을 구현하는 데 도움이 필요함

- HTTP 보안 프로토콜(예: HttpOnly, SecurePolicy) 이해 필요

핵심 요약

  • 쿠키 인증 설정: AddAuthentication을 통해 CookieAuthenticationDefaults 기반 인증을 활성화하고 HttpOnly, SecurePolicy, SameSite 옵션으로 보안 강화
  • 사용자 역할 관리: ClaimsIdentity에 사용자 이름, 이메일, 역할 정보를 포함하여 Authorize 어트리뷰트로 역할 기반 인가 적용
  • 쿠키 세션 관리: ExpireTimeSpanSlidingExpiration을 통해 쿠키 유효 기간 및 자동 갱신 기능 설정

섹션별 세부 요약

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을 사용해 사용자 경험 향상
  • 역할 기반 인가: ClaimsIdentityAuthorize 어트리뷰트를 통해 세분화된 접근 제어 실현
  • 테스트 환경: 로컬 개발 시 localhost는 HTTPS 강제 설정을 우회하지만, 실제 배포 시 반드시 HTTPS 적용 필수