배경
현재 운영(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 스키마 정찰을 공짜로 내주므로, 노출하려면 접근 통제가 전제.
배경
현재 운영(prod)은 springdoc 을 비활성(
springdoc.*.enabled=false)으로 둠 — 공개 엔드포인트 정보노출 최소화(ADR-0020). 운영 URL(api.ieoseo.app)에서 문서를 보려면 권한(인증) 게이트가 필요하다. 지금은 보류하고 나중에 권한으로 처리.우선안 — OAuth2 로그인 게이트 (방식 C)
SecurityFilterChain(@Order(1), securityMatcher),oauth2Login()으로 게이트(세션). 메인 JWT 체인은 stateless 유지(@Order(2)).spring-boot-starter-oauth2-client추가, 공급자(Google 또는 Supabase OIDC) 등록.https://api.ieoseo.app/login/oauth2/code/google를 Google 콘솔에 추가.OidcUserService에서 본인 이메일만ROLE_DOCS부여.enabled=true) 위 체인 뒤에 둔다.대안
SWAGGER_USER/SWAGGER_PASSWORD(ACA secret). 가볍지만 공유 비번.완료 조건
분석 경위: 운영 노출은 인증 우회는 아니나(인증 유지) API 스키마 정찰을 공짜로 내주므로, 노출하려면 접근 통제가 전제.