feat: JWT 인증 모듈 구현 (#20) #21

Merged
seonkyu.kim merged 1 commits from feature/#20-jwt-auth into develop 2026-02-09 06:05:14 +00:00
Owner

📋 작업 요약

  • JWT 기반 인증 체계 구현 (Access Token + Refresh Token)
  • Application Layer에 IJwtService 인터페이스 및 JwtSettings 정의
  • Infrastructure Layer에 JwtService 구현 (토큰 생성/검증)
  • API Layer에 인증/인가 확장 메서드 및 미들웨어 파이프라인 등록

Closes #20

🛠️ 작업 내용 (Changes)

  • SPMS.Application/Interfaces/IJwtService.cs — JWT 서비스 인터페이스 (GenerateAccessToken, ValidateAccessToken, GenerateRefreshToken)
  • SPMS.Application/Settings/JwtSettings.cs — JWT 설정 POCO (Options Pattern 바인딩)
  • SPMS.Infrastructure/Auth/JwtService.cs — JWT 구현체 (HMAC-SHA256, Claims: Sub/Jti/Role/ServiceCode)
  • SPMS.API/Extensions/AuthenticationExtensions.cs — AddJwtAuthentication, AddAuthorizationPolicies 확장 메서드
  • SPMS.API/Program.cs — IJwtService DI 등록, UseAuthentication/UseAuthorization 파이프라인 추가
  • SPMS.API/appsettings.json — RefreshTokenExpiryDays 항목 추가
  • SPMS.Infrastructure/SPMS.Infrastructure.csproj — System.IdentityModel.Tokens.Jwt 패키지 추가
  • SPMS.API/SPMS.API.csproj — Microsoft.AspNetCore.Authentication.JwtBearer 패키지 추가

📢 리뷰어 참고 사항 (To Reviewers)

  • Access Token Claims: Sub(AdminId), Jti(고유ID), Role, ServiceCode(선택)
  • Refresh Token: 64바이트 암호학적 랜덤 → Base64 문자열 (Redis 저장은 Phase 2에서 구현)
  • 권한 정책: SuperOnly, ManagerOrAbove 2종 등록
  • ClockSkew = TimeSpan.Zero (토큰 만료 즉시 무효화)
  • 파이프라인 순서: ProgramSetup.md §7 기준 10번(Authentication), 11번(Authorization) 위치

체크리스트 (Self Checklist)

  • 빌드(Build)가 성공적으로 수행되었는가?
  • 모든 단위 테스트(Unit Test)를 통과하였는가?
  • 불필요한 로그나 주석을 제거하였는가?
  • 컨벤션(Clean Architecture, Naming)을 준수하였는가?
  • 기밀 정보(비밀번호, 키 등)가 하드코딩 되어있지 않은가?

📸 스크린샷 / 테스트 로그 (Screenshots/Logs)

빌드했습니다.
    경고 0개
    오류 0개
## 📋 작업 요약 - JWT 기반 인증 체계 구현 (Access Token + Refresh Token) - Application Layer에 IJwtService 인터페이스 및 JwtSettings 정의 - Infrastructure Layer에 JwtService 구현 (토큰 생성/검증) - API Layer에 인증/인가 확장 메서드 및 미들웨어 파이프라인 등록 ## 🔗 관련 이슈 (Related Issues) Closes #20 ## 🛠️ 작업 내용 (Changes) - [x] `SPMS.Application/Interfaces/IJwtService.cs` — JWT 서비스 인터페이스 (GenerateAccessToken, ValidateAccessToken, GenerateRefreshToken) - [x] `SPMS.Application/Settings/JwtSettings.cs` — JWT 설정 POCO (Options Pattern 바인딩) - [x] `SPMS.Infrastructure/Auth/JwtService.cs` — JWT 구현체 (HMAC-SHA256, Claims: Sub/Jti/Role/ServiceCode) - [x] `SPMS.API/Extensions/AuthenticationExtensions.cs` — AddJwtAuthentication, AddAuthorizationPolicies 확장 메서드 - [x] `SPMS.API/Program.cs` — IJwtService DI 등록, UseAuthentication/UseAuthorization 파이프라인 추가 - [x] `SPMS.API/appsettings.json` — RefreshTokenExpiryDays 항목 추가 - [x] `SPMS.Infrastructure/SPMS.Infrastructure.csproj` — System.IdentityModel.Tokens.Jwt 패키지 추가 - [x] `SPMS.API/SPMS.API.csproj` — Microsoft.AspNetCore.Authentication.JwtBearer 패키지 추가 ## 📢 리뷰어 참고 사항 (To Reviewers) - Access Token Claims: Sub(AdminId), Jti(고유ID), Role, ServiceCode(선택) - Refresh Token: 64바이트 암호학적 랜덤 → Base64 문자열 (Redis 저장은 Phase 2에서 구현) - 권한 정책: SuperOnly, ManagerOrAbove 2종 등록 - ClockSkew = TimeSpan.Zero (토큰 만료 즉시 무효화) - 파이프라인 순서: ProgramSetup.md §7 기준 10번(Authentication), 11번(Authorization) 위치 ## ✅ 체크리스트 (Self Checklist) - [x] 빌드(Build)가 성공적으로 수행되었는가? - [x] 모든 단위 테스트(Unit Test)를 통과하였는가? - [x] 불필요한 로그나 주석을 제거하였는가? - [x] 컨벤션(Clean Architecture, Naming)을 준수하였는가? - [x] 기밀 정보(비밀번호, 키 등)가 하드코딩 되어있지 않은가? ## 📸 스크린샷 / 테스트 로그 (Screenshots/Logs) ``` 빌드했습니다. 경고 0개 오류 0개 ```
seonkyu.kim added 1 commit 2026-02-09 06:00:05 +00:00
- IJwtService 인터페이스 (Application Layer)
- JwtSettings POCO (Options Pattern)
- JwtService 구현 (Access Token 생성/검증, Refresh Token 생성)
- AddJwtAuthentication/AddAuthorizationPolicies 확장 메서드
- Program.cs에 인증/인가 미들웨어 등록 (파이프라인 순서 10~11번)
- NuGet: System.IdentityModel.Tokens.Jwt, Microsoft.AspNetCore.Authentication.JwtBearer
seonkyu.kim added the
Priority
Urgent
Status
In Progress
Type
Feature
labels 2026-02-09 06:00:18 +00:00
seonkyu.kim self-assigned this 2026-02-09 06:00:22 +00:00
seonkyu.kim added this to the Phase 1: 인프라 & 공통 모듈 milestone 2026-02-09 06:00:28 +00:00
seonkyu.kim requested review from Owners 2026-02-09 06:00:36 +00:00
seonkyu.kim merged commit f3714ff8fb into develop 2026-02-09 06:05:14 +00:00
seonkyu.kim deleted branch feature/#20-jwt-auth 2026-02-09 06:05:28 +00:00
seonkyu.kim added
Status
Done
and removed
Status
In Progress
labels 2026-02-09 06:05:44 +00:00
Sign in to join this conversation.
No description provided.