Skip to content

feat(sso): SP 별 '모든 사용자 허용(allow_all_users)' 옵션 추가 - #80

Merged
mack-erel merged 1 commit into
mainfrom
feat/sp-allow-all-users
Jul 7, 2026
Merged

feat(sso): SP 별 '모든 사용자 허용(allow_all_users)' 옵션 추가#80
mack-erel merged 1 commit into
mainfrom
feat/sp-allow-all-users

Conversation

@mack-erel

Copy link
Copy Markdown
Owner

요약

서비스 권한 모델은 user_service_assignments 기반 기본 deny 라, 지금까지는 SP(OIDC 클라이언트 / SAML SP)마다 사용자별 서비스 지정이 필수였다. 사내 위키처럼 전 직원이 쓰는 서비스를 위해 SP 별 opt-in 플래그 allow_all_users 를 추가한다. 체크된 SP 는 매핑 없이도 테넌트의 모든 로그인 사용자가 SSO 가능하다. 기본값 false — 기존 SP 동작은 변하지 않는다.

변경 내용

  • 스키마: oidc_clients·saml_spsallow_all_users boolean 컬럼 (sqlite/pg/mysql 3개 dialect, 패리티 테스트 통과). 마이그레이션 4개 트랙 생성 (drizzle/0028, drizzle/{pg,mysql,sqlite}/0011)
  • OIDC authorize: client.allowAllUsers 면 서비스 권한 게이트 통과
  • SAML SSO: sp.allowAllUsers 면 매핑 없이 Assertion 발급. Role/RoleLabel·추가 attribute 는 assignment 가 있는 사용자에게만 부여 (없으면 기본 프로필 속성만)
  • token 엔드포인트: 원래 null assignment 를 허용(역할/속성 머지만 조건부)하므로 수정 불필요
  • 관리자 UI: OIDC 클라이언트·SAML SP 생성/수정 폼에 "모든 사용자 허용" 체크박스 + en/ko i18n. SAML 은 권한 표면 확대 변경이므로 audit diff 에 allowAllUsers 변경 여부 기록
  • 테스트: 하네스 seed 에 allowAllUsers 옵션 추가, allow-all 경로 통합 테스트 2건 (OIDC code 발급 성공 / SAML Assertion 발급 + Role 속성 미포함)

검증

  • vitest 통합 테스트 48건 전부 통과 (schema-parity 포함)
  • svelte-check 0 errors, bun run build 성공
  • PG 마이그레이션은 적용 완료, D1 은 필요 시 bun run db:migrate:preview/db:migrate 실행 필요

🤖 Generated with Claude Code

- oidc_clients / saml_sps 에 allow_all_users 컬럼 추가 (3개 dialect + 마이그레이션 4개 트랙)
- OIDC authorize / SAML SSO 게이트: 플래그가 켜진 SP 는 user_service_assignments 매핑 없이도 SSO 허용 (기본 deny 유지, opt-in)
- 매핑 없는 사용자는 Role/추가 속성 없이 기본 프로필 속성만 발급
- 관리자 UI(OIDC 클라이언트·SAML SP 생성/수정 폼)에 체크박스 + en/ko i18n
- SAML SP audit diff 에 allowAllUsers 변경 여부 기록
- 통합 테스트: allow-all 경로 OIDC/SAML 각 1건 추가

Co-Authored-By: Claude Fable 5 <[email protected]>
@mack-erel
mack-erel merged commit 724797b into main Jul 7, 2026
6 checks passed
@mack-erel
mack-erel deleted the feat/sp-allow-all-users branch July 7, 2026 08:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant