[Feature] civil-engineering-lab 프로젝트 인증 시스템 통합 및 보안 게이트웨이 구축 #12

Closed
opened 2026-04-13 10:11:03 +09:00 by kyy · 1 comment
Owner

목표

headless-login-demo에서 검증된 OIDC Headless 인증 시스템을 civil-engineering-lab 프로젝트(Astro 기반)에 통합하여, 인증된 사용자만 시스템에 접근할 수 있도록 보안 게이트웨이를 구축합니다.

작업 단계별 계획

1. 인프라 및 환경 설정 (Setup)

  • civil-engineering-lab 프로젝트의 SSR 모드 활성화 (astro.config.mjs 수정)
  • 필수 의존성 설치: openid-client, jose, express-session, dotenv
  • .env 환경 변수 구성 (OIDC Issuer, Client ID, Redirect URI 등)
  • RSA 키 쌍 생성 및 keys.json 관리 로직 이식

2. 인증 백엔드 엔진 이식 (Auth Engine)

  • OIDC Discovery 및 클라이언트 초기화 로직 구현
  • JWKS 엔드포인트 구현 (/.well-known/jwks.json 노출)
  • Headless 인증 API 구현:
    • POST /api/login: 사번 기반 Password Grant
    • POST /api/send-link: 전화번호 인증링크 발송
    • POST /api/poll: 인증 상태 폴링
  • OIDC Callback 처리 및 세션 생성 로직

3. 보안 미들웨어 및 라우팅 (Security)

  • Astro Middleware 구현:
    • 모든 라우트에 대해 세션 유효성 검증
    • 미인증 사용자의 경우 /login으로 리다이렉트
    • 정적 자산(CSS, JS) 및 /api/auth 관련 경로는 예외 처리
  • 로그아웃(POST /api/logout) 및 세션 파기 로직

4. 프론트엔드 통합 (UI/UX)

  • src/pages/login.astro 생성: 기존 index.html 기반의 UI 구현
  • app.js 로직을 Astro/Vanilla JS 컴포넌트로 변환
  • PM-fork 스타일 테마(다크 그린 #0f3d2e) 및 애니메이션 적용
  • 로그인 성공 후 대시보드로의 자연스러운 전환

5. 검증 및 최적화

  • 실제 baron-sso와의 연동 테스트
  • 모바일/데스크탑 반응형 레이아웃 확인
  • 단계별 한국어 시스템 로직(Step 1~5) 적용 확인

기대 효과

  • IdP UI 노출 없는 매끄러운 사용자 인증 경험 제공
  • civil-engineering-lab 내 모든 리소스에 대한 강력한 접근 제어
  • 향후 타 프로젝트로의 인증 모듈 확장을 위한 표준 아키텍처 수립
### 목표 `headless-login-demo`에서 검증된 OIDC Headless 인증 시스템을 `civil-engineering-lab` 프로젝트(Astro 기반)에 통합하여, 인증된 사용자만 시스템에 접근할 수 있도록 보안 게이트웨이를 구축합니다. ### 작업 단계별 계획 #### 1. 인프라 및 환경 설정 (Setup) - [ ] `civil-engineering-lab` 프로젝트의 SSR 모드 활성화 (`astro.config.mjs` 수정) - [ ] 필수 의존성 설치: `openid-client`, `jose`, `express-session`, `dotenv` - [ ] `.env` 환경 변수 구성 (OIDC Issuer, Client ID, Redirect URI 등) - [ ] RSA 키 쌍 생성 및 `keys.json` 관리 로직 이식 #### 2. 인증 백엔드 엔진 이식 (Auth Engine) - [ ] OIDC Discovery 및 클라이언트 초기화 로직 구현 - [ ] **JWKS 엔드포인트** 구현 (`/.well-known/jwks.json` 노출) - [ ] **Headless 인증 API** 구현: - `POST /api/login`: 사번 기반 Password Grant - `POST /api/send-link`: 전화번호 인증링크 발송 - `POST /api/poll`: 인증 상태 폴링 - [ ] OIDC Callback 처리 및 세션 생성 로직 #### 3. 보안 미들웨어 및 라우팅 (Security) - [ ] **Astro Middleware** 구현: - 모든 라우트에 대해 세션 유효성 검증 - 미인증 사용자의 경우 `/login`으로 리다이렉트 - 정적 자산(CSS, JS) 및 `/api/auth` 관련 경로는 예외 처리 - [ ] 로그아웃(`POST /api/logout`) 및 세션 파기 로직 #### 4. 프론트엔드 통합 (UI/UX) - [ ] `src/pages/login.astro` 생성: 기존 `index.html` 기반의 UI 구현 - [ ] `app.js` 로직을 Astro/Vanilla JS 컴포넌트로 변환 - [ ] **PM-fork 스타일** 테마(다크 그린 #0f3d2e) 및 애니메이션 적용 - [ ] 로그인 성공 후 대시보드로의 자연스러운 전환 #### 5. 검증 및 최적화 - [ ] 실제 `baron-sso`와의 연동 테스트 - [ ] 모바일/데스크탑 반응형 레이아웃 확인 - [ ] 단계별 한국어 시스템 로직(Step 1~5) 적용 확인 ### 기대 효과 - IdP UI 노출 없는 매끄러운 사용자 인증 경험 제공 - `civil-engineering-lab` 내 모든 리소스에 대한 강력한 접근 제어 - 향후 타 프로젝트로의 인증 모듈 확장을 위한 표준 아키텍처 수립
kyy added the
상태
개발진행
label 2026-04-13 10:11:12 +09:00
Author
Owner

작업 완료 보고

civil-engineering-lab 프로젝트와 headless-login-demo 인증 시스템의 통합 작업이 기본적으로 완료되었습니다.

완료된 주요 항목:

  1. headless-login-demo 개편:
    • Dual Mode 지원: .env 설정에 따라 Astro(UI 기반) 또는 Express(API 기반)로 구동 가능하도록 개선.
    • 로직 모듈화: OIDC 인증 핵심 로직을 src/lib/oidc_service.js로 분리하여 코드 중복 제거.
    • UI/UX 이식: 기존 Express 기반의 전문적인 디자인 마크업을 Astro 컴포넌트(index.astro, home.astro)로 완벽히 복원.
  2. civil-engineering-lab 통합:
    • 보안 미들웨어 적용: src/middleware.ts를 통해 모든 페이지에 대한 접근 제어 로직 수립.
    • 인증 리다이렉트: 미인증 사용자를 4000번 포트의 인증 서버로 자동 이동시키는 흐름 구축.

특이 사항:

  • 현재 두 프로젝트 간 포트 번호 차이(4000 vs 4321)로 인해 세션 쿠키가 공유되지 않는 문제가 발견되어, 이를 해결하기 위한 후속 작업을 별도 이슈로 생성하여 진행할 예정입니다.
### 작업 완료 보고 `civil-engineering-lab` 프로젝트와 `headless-login-demo` 인증 시스템의 통합 작업이 기본적으로 완료되었습니다. #### 완료된 주요 항목: 1. **headless-login-demo 개편**: - **Dual Mode 지원**: `.env` 설정에 따라 Astro(UI 기반) 또는 Express(API 기반)로 구동 가능하도록 개선. - **로직 모듈화**: OIDC 인증 핵심 로직을 `src/lib/oidc_service.js`로 분리하여 코드 중복 제거. - **UI/UX 이식**: 기존 Express 기반의 전문적인 디자인 마크업을 Astro 컴포넌트(`index.astro`, `home.astro`)로 완벽히 복원. 2. **civil-engineering-lab 통합**: - **보안 미들웨어 적용**: `src/middleware.ts`를 통해 모든 페이지에 대한 접근 제어 로직 수립. - **인증 리다이렉트**: 미인증 사용자를 4000번 포트의 인증 서버로 자동 이동시키는 흐름 구축. #### 특이 사항: - 현재 두 프로젝트 간 포트 번호 차이(4000 vs 4321)로 인해 세션 쿠키가 공유되지 않는 문제가 발견되어, 이를 해결하기 위한 후속 작업을 별도 이슈로 생성하여 진행할 예정입니다.
kyy closed this issue 2026-04-13 13:17:47 +09:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: kyy/headless-login-demo#12