Skip to content

운영 Swagger 노출 — 인증 게이트 후속(OAuth2 로그인 + 이메일 허용목록) #21

Description

@pkdee

배경

현재 운영(prod)은 springdoc 을 비활성(springdoc.*.enabled=false)으로 둠 — 공개 엔드포인트 정보노출 최소화(ADR-0020). 운영 URL(api.ieoseo.app)에서 문서를 보려면 권한(인증) 게이트가 필요하다. 지금은 보류하고 나중에 권한으로 처리.

우선안 — OAuth2 로그인 게이트 (방식 C)

  • Swagger 경로만 별도 SecurityFilterChain(@Order(1), securityMatcher), oauth2Login() 으로 게이트(세션). 메인 JWT 체인은 stateless 유지(@Order(2)).
  • 의존성 spring-boot-starter-oauth2-client 추가, 공급자(Google 또는 Supabase OIDC) 등록.
  • redirect URI https://api.ieoseo.app/login/oauth2/code/google 를 Google 콘솔에 추가.
  • ⚠️ 이메일 허용목록 필수 — 아무 Google 계정이나 로그인=문서 공개가 되지 않도록 OidcUserService 에서 본인 이메일만 ROLE_DOCS 부여.
  • prod 에서 springdoc 을 다시 켜고(enabled=true) 위 체인 뒤에 둔다.

대안

  • Basic Auth (방식 A): 인메모리 유저 1개 + SWAGGER_USER/SWAGGER_PASSWORD(ACA secret). 가볍지만 공유 비번.
  • 현행 유지 + local 노출 (방식 4): 운영 노출 0. 문서는 local/스크린샷.

완료 조건

  • 미인증 시 401/redirect, 허용 사용자만 문서 열람 → 200 (테스트 포함).
  • ADR-0020 갱신(prod 비활성 → 게이트), 배포 가이드에 env·체인·redirect URI 추가.

분석 경위: 운영 노출은 인증 우회는 아니나(인증 유지) API 스키마 정찰을 공짜로 내주므로, 노출하려면 접근 통제가 전제.

Metadata

Metadata

Assignees

Labels

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions