Sentivex Auth

auth.in-bridge.com

패밀리 공통 OAuth2/OIDC 인증 서버. 조직·역할·스코프·테넌트를 전 제품에 발급한다.

개요

Sentivex Auth 는 패밀리(Sentivex·SEE·SIT·SCTI·이 랜딩)의 공용 IdP 입니다. 어느 한 곳에서 로그인하면 IdP 세션이 생기고, 다른 제품들이 자동 인증됩니다. IdP 는 조직 광역 역할(브로드롤)만 토큰/userinfo 클레임으로 발급하고, 제품별 세분 권한은 각 제품이 로컬로 해석합니다 — 브로드롤 키는 Sentivex 퍼스펙티브 키와 100% 동일한 계약입니다.

책임내용
SSO / OIDCauthorize → token → userinfo 표준 플로우, 패밀리 전 제품의 로그인 근원
역할·스코프브로드롤 발급(=퍼스펙티브 계약) · 제품별 스코프 시드(pm:*·ti:*·see:* 환산의 원본)
구독·테넌트subscription_status(suspended 차단)·plan·entitlements 클레임, 테넌트=SSO/렐름 경계
메뉴 카탈로그제품별 메뉴 카탈로그 API — 각 제품 상단 네비가 이걸 소비(하드코딩 금지)

OIDC 플로우

이 랜딩 사이트 자체가 auth 의 실제 OIDC 클라이언트입니다 — 아래 플로우는 이 사이트의 로그인 버튼이 실제로 밟는 경로입니다.

단계내용
1. authorize클라이언트가 state 를 만들고 IdP authorize URL 로 리다이렉트
2. 로그인/동의사용자가 IdP 에서 인증 — 여기서 IdP 글로벌 SSO 세션이 생성됨
3. callbackcode 수신 → 서버간 token 교환 → userinfo 조회
4. 앱 세션각 제품이 자기 세션(서명 쿠키 등)을 발급 — 형태는 제품별(랜딩=see_id, Sentivex=svx_session, SIT=token, SCTI=ops_session+ti_id, SEE=see_session)

소비자 구현 팁(이 레포 실측): 프록시 뒤에서는 x-forwarded-host/proto 로 공개 origin 을 복원해 redirect_uri 를 IdP 등록값과 일치시켜야 하고(localhost 누출 금지), token/userinfo 응답은 {data} 봉투·bare 양쪽을 방어적으로 언랩해야 합니다.

API 카탈로그

정본은 auth 오리진(Swagger auth.in-bridge.com/docs · ENDPOINTS-REFERENCE.md). 아래는 그룹·prefix 소개, 상세는 로그인 후.

그룹prefix용도
인증/토큰/api/v1/auth로그인·로그아웃·토큰 갱신·MFA
OAuth2/OIDC/oauth/* · /.well-known/*authorize·token·consent·Discovery·JWKS
사용자/api/v1/users사용자 CRUD
조직/부서/api/v1/organizations조직·조직도
세션/api/v1/sessions활성 세션 조회/철회
카탈로그/api/v1/catalog메뉴·역할·스코프·벤더·plans·tenants (공개 read)
테넌트/api/v1/tenants테넌트·라이선스·멤버·SSO·초대
연합 SSO/api/v1/sso · /sso · /scim/v2소셜/OIDC·LDAP·SAML·SCIM
관리(super_admin)/api/v1/admin/*oauth-clients·users·tenants·audit-logs·realms

에러 · rate limit

표준 응답: { success:false, error:{ code, message, details }, meta } — 제품별 포맷 상이(SIT 는 {error,code}, auth 는 {success,error{}}).

코드HTTP의미
AUTH_INVALID_CREDENTIALS401자격증명 불일치
AUTH_ACCOUNT_LOCKED401/4035회 실패 계정 잠금
AUTH_ACCOUNT_SUSPENDED403계정 정지
AUTH_TOKEN_EXPIRED / _INVALID / _REVOKED401토큰 만료/무효/철회(블랙리스트)
AUTH_REFRESH_TOKEN_INVALID400/401refresh token 무효
AUTH_MFA_REQUIRED / _INVALID401MFA 필요/코드 오류
AUTH_UNAUTHORIZED / AUTH_FORBIDDEN401/403인증 필요 / 권한 없음
USER_NOT_FOUND / USER_EMAIL_ALREADY_EXISTS404/409사용자 없음/이메일 중복
ORG_* (NOT_FOUND · SLUG · MEMBER)404/409조직 없음/slug·멤버 중복
APP_SEAT_LIMIT_EXCEEDED403멤버추가 seat 한도 초과(라이선스)
APP_INVITATION_EXPIRED / _ALREADY_ACCEPTED410/409초대 만료/이미 수락
SESSION_NOT_FOUND / SESSION_EXPIRED404/401세션 없음/만료
TENANT_NOT_FOUND404테넌트 없음
VALIDATION_ERROR400입력 검증 실패(details[])
RATE_LIMIT_EXCEEDED429레이트리밋 초과
INTERNAL_ERROR500내부 오류

OAuth2 에러(/oauth/token 등, RFC 6749): invalid_request · invalid_client · invalid_grant · unauthorized_client · unsupported_grant_type · unsupported_response_type · invalid_scope · access_denied · server_error · temporarily_unavailable.

앱별 스코프

스코프의미
inbridge-authauth:read자기 신원·세션·권한 조회 (전 역할 기본 보유)
inbridge-authauth:tenant테넌트 멤버·SSO·앱·초대 관리
inbridge-authauth:admin클라이언트·테넌트·카탈로그·감사 전역 관리(super_admin)
index-pmpm:read · pm:write · pm:respond · pm:admin조회 · 작성 · 인시던트 대응/HITL · 워크스페이스 관리
seesee:read · see:analyze · see:respond · see:admin분석 조회 · 분석 실행(멀티렌즈) · HITL/SIT 전환 · 파이프라인 설정
ti-appti:read · ti:write · ti:huntIOC 조회 · 해시/benign 등록·상관 · 위협 헌팅/파이프라인
sentivex(스코프 없음)메뉴 가시성(role×menu, 82메뉴×9역할)으로 통제

역할 × 스코프 매트릭스

역할authindex-pm (pm)seeti-app (ti)
analystreadread,write,respondread,analyze,respondread,write
hunterreadread,writeread,analyzeread,write,hunt
cisoreadreadreadread
responderreadread,write,respondread,respondread,write
generalreadreadread
pmreadadmin,read,writeread
salesreadreadread
tenantread,tenantadmin,read,respond,writeadmin,analyze,read,respondread,write,hunt
superadmin,read,tenantadmin,read,respond,writeadmin,analyze,read,respondread,write,hunt
super_adminadmin,read,tenant

MSSP 테넌트 스코프(#44): userinfo 가 allowed_tenants: string[](접근 가능한 enrich tenant_name 목록)을 발급 — 원천은 tenants.settings.dataTenants(jsonb). 데모 MSSP(sentivex-demo) = [in-bridge, hanssem, kumho]. 회귀 검증 스크립트: scripts/verify-userinfo-claims.mjs.

테스트 계정

3계층: ① 시스템역할 super_admin(IdP 전역) ② perspective 역할(제품 스코프·메뉴) ③ 테넌트역할 owner/admin/developer.

이름이메일테넌트perspective시스템/테넌트 역할접근 앱
System Admin[email protected]InBridge System-super_admin / ownerauth(전역)+전 제품
윤덕진[email protected]InBridge Systemsupersuper_admin / -sentivex·sit·see·scti
관리자 데모[email protected]Sentivexsuper- / adminsentivex·sit·see·scti
김옥현[email protected]Sentivextenant- / ownersentivex·sit·see·scti
박서준[email protected]Sentivexanalyst- / developersentivex·sit·see·scti
이지우[email protected]Sentivexanalyst- / developersentivex·sit·see·scti
최민서[email protected]Sentivexanalyst- / developersentivex·sit·see·scti
이하나[email protected]Sentivexhunter- / developersentivex·sit·see·scti
정도윤[email protected]Sentivexhunter- / developersentivex·sit·see·scti
강시우[email protected]Sentivexhunter- / developersentivex·sit·see·scti
임하준[email protected]Sentivexciso- / developersentivex·sit·see·scti
윤서연[email protected]Sentivexciso- / developersentivex·sit·see·scti
오유진[email protected]Sentivexresponder- / developersentivex·sit·see·scti
신아린[email protected]Sentivexresponder- / developersentivex·sit·see·scti
배준우[email protected]Sentivexgeneral- / developersentivex·sit·scti
조은서[email protected]Sentivexgeneral- / developersentivex·sit·scti
권태오[email protected]Sentivexpm- / developersentivex·sit·scti
남도현[email protected]Sentivexpm- / developersentivex·sit·scti
서나윤[email protected]Sentivexsales- / developersentivex·sit·scti
백승호[email protected]Sentivexsales- / developersentivex·sit·scti
Alice Kim[email protected]Acme Store-- / owner자기 테넌트만
Bob Park[email protected]Acme Store-- / admin자기 테넌트만
Carol Choi[email protected]Acme Store-- / developer자기 테넌트만
Dave Yoon[email protected]Acme Store-- / developer자기 테넌트만
Sarah Oh[email protected]Nexus HR-- / owner자기 테넌트만
James Park[email protected]Nexus HR-- / admin자기 테넌트만
Emily Kim[email protected]Nexus HR-- / developer자기 테넌트만
Michael Lee[email protected]Nexus HR-- / developer자기 테넌트만

역할별 대표 계정: analyst=sj.park · hunter=ha.lee · ciso=hj.lim · responder=yj.oh · general=jw.bae · pm=to.kwon · sales=ny.seo · tenant=ok.kim(owner) · super=admin.demo · [email protected].

브로드롤 계약

IdP 가 발급하는 브로드롤 9종(analyst/hunter/ciso/responder/general/pm/tenant/super/sales)은 각 제품에서 로컬 환산됩니다 — SIT: pm:* 스코프 환산표(role-scopes.ts, IdP 시드와 100% 일치 계약) · SCTI: userinfo scopes['ti-app'] → ti:read/write/hunt · SEE: see/sxe 롤 게이트 + X-Required-Scope. 각 제품 페이지의 인증 섹션에 제품별 상세가 있습니다.

userinfo 공통 클레임 계약(소비자 실측 종합): roles[](브로드롤) · entitlements[](제품 접근 게이트, 예: ti-app) · subscription_status(suspended=차단, active/trial/grace=통과) · plan(메뉴 min_plan 소비 예정) · scopes{제품별}. 계약 SoT 는 inbridge-auth oauth.routes.ts + README §4, 테스트 계정은 docs/ACCOUNTS-MATRIX.md(비밀번호 평문 복제 금지).