엔터프라이즈 건강 및 웰니스 플랫폼을 위한 Okta SSO 및 SCIM 통합
한 엔터프라이즈 건강 및 웰니스 SaaS 플랫폼은 원활한 직원 액세스를 위한 Single Sign-On (SSO)과 SCIM을 통한 자동화된 사용자 프로비저닝/역할 해제를 요구하는 대규모 조직 고객을 지원해야 했습니다. 이는 엔터프라이즈 영업을 위한 필수 요건이었습니다.
프로젝트 상담하기
과제
엔터프라이즈 고객들은 ID 연동 및 자동화된 라이프사이클 관리 없이는 플랫폼 도입을 거부했습니다:
- SSO 요구 사항 — IT 부서는 직원들이 개별 자격 증명이 아닌 기업의 ID 공급자를 통해 로그인하도록 지시했습니다
- 수동 온보딩 오버헤드 — 새로운 조직이 가입할 때 수백 명의 직원을 수동으로 추가하는 데 며칠간의 관리 작업이 소요되었습니다
- 오프보딩 위험 — 직원들이 조직을 떠난 후에도 플랫폼 계정이 몇 주 동안 활성 상태로 유지되어 규정 준수 및 데이터 액세스 문제를 야기했습니다
- 그룹 기반 액세스 — 다른 직원 그룹은 다른 기능 계층 및 프로그램 액세스를 필요로 했습니다
- 멀티테넌트 복잡성 — 각 엔터프라이즈 고객은 서로 다른 구성, 속성 매핑 및 그룹 구조를 가진 자체 ID 공급자 테넌트를 가지고 있었습니다
- 기존 인증 공존 — 플랫폼은 이미 이메일/비밀번호 및 OAuth 기반 인증을 사용하고 있었습니다. SSO는 기존 흐름을 방해하지 않고 공존해야 했습니다
우리의 솔루션
우리는 인증을 위해 SAML 2.0/OIDC를 통한 Okta SSO를, 자동화된 사용자 프로비저닝, 역할 해제 및 그룹 동기화를 위해 SCIM 2.0을 구현하여 기존 멀티테넌트 백엔드에 통합했습니다.
아키텍처
- ID 공급자: Okta (고객 관리 테넌트)
- SSO 프로토콜: SAML 2.0 (주요) + OIDC (대안)
- 프로비저닝: 플랫폼 백엔드에 내장된 SCIM 2.0 서버
- 백엔드: PostgreSQL 및 Redis를 사용한 NestJS
- 인증 계층: SSO를 인식하는 토큰 발행 기능을 갖춘 JWT 기반 세션
- 관리자 대시보드: SSO 설정을 위한 React 기반 테넌트 구성
- 기존 인증: 이메일/비밀번호 + Google OAuth가 SSO와 함께 유지되었습니다
---
SSO 구현 (SAML 2.0 / OIDC)
SAML 2.0 흐름
SP-initiated SAML 흐름은 다음과 같이 작동합니다: 사용자가 로그인 페이지를 방문하여 SSO를 선택하고, 회사 이메일 도메인을 입력하면 플랫폼은 해당 도메인에서 테넌트의 Okta 구성을 식별하고, Okta에 AuthnRequest를 전송합니다. 사용자가 인증하면 Okta는 서명된 SAML assertion을 반환하고, 플랫폼은 assertion을 검증한 후 JWT 토큰으로 세션을 생성합니다.
테넌트별 구성
각 테넌트의 SSO는 ID 공급자의 SSO URL, entity ID, 서명 검증을 위한 X.509 인증서와 함께 플랫폼의 SP entity ID, assertion consumer service URL, 그리고 ID 공급자 프로필 필드에서 플랫폼 사용자 필드로의 속성 매핑으로 구성됩니다.
OIDC 대안
SAML보다 OIDC를 선호하는 고객을 위해 플랫폼은 OIDC 클레임을 통한 동일한 속성 매핑과 JWKS를 사용한 ID 토큰 유효성 검사를 통해 PKCE가 포함된 Authorization Code flow를 지원합니다.
멀티테넌트 SSO 라우팅
플랫폼은 사용자의 이메일 도메인을 기반으로 올바른 ID 공급자로 사용자를 라우팅합니다. 사용자가 이메일을 입력하면 플랫폼은 테넌트 SSO 구성에 대해 도메인을 조회합니다. SSO가 구성된 경우, 사용자는 해당 조직의 Okta 테넌트로 리디렉션됩니다. 그렇지 않은 경우, 이메일/비밀번호 또는 Google OAuth로 대체됩니다. 직접 SSO 액세스를 위한 Vanity URL도 지원됩니다. ---
SCIM 2.0 구현
SCIM 서버
플랫폼은 Okta가 사용자 및 그룹을 관리하기 위해 호출하는 SCIM 2.0 준수 API를 노출합니다. 이 API는 전체 사용자 라이프사이클 작업(생성, 읽기, 업데이트, 비활성화, 삭제), 멤버십 관리를 포함한 그룹 CRUD, 그리고 기능, 스키마, 리소스 유형을 위한 표준 SCIM 검색 엔드포인트를 지원합니다.
SCIM을 통한 사용자 라이프사이클
프로비저닝:관리자가 Okta에서 플랫폼 앱에 사용자를 할당하면 Okta는 SCIM API에 생성 요청을 보냅니다. 플랫폼은 테넌트 연관과 함께 사용자 계정을 생성하고, 이를 활성 및 SSO 프로비저닝된 것으로 표시하며, 사용자는 SSO를 통해 즉시 로그인할 수 있습니다.
프로필 업데이트:관리자가 Okta에서 사용자 프로필을 업데이트하면 변경 사항은 SCIM을 통해 플랫폼으로 푸시됩니다. 부서 변경 시 그룹 멤버십은 자동으로 재평가됩니다.
역할 해제:Okta에서 사용자가 앱에서 제거되면 플랫폼은 계정을 비활성화합니다. 즉시 모든 활성 세션을 취소하고, 추가 로그인을 방지하며, 보존 정책에 따라 데이터를 유지하고, 라이선스 시트를 확보합니다.
재활성화:Okta에서 사용자를 다시 할당하면 모든 이전 데이터를 그대로 유지한 채 계정이 재활성화됩니다.
그룹 동기화
Okta 그룹은 플랫폼 역할 및 프로그램 계층에 매핑되어 다양한 기능 수준, 관리자 기능, 전문화된 대시보드 및 독점 프로그램 등록에 대한 액세스를 제어합니다. Okta의 그룹 멤버십 변경 사항은 SCIM을 통해 푸시되며 다시 로그인할 필요 없이 실시간으로 반영됩니다. ---
보안 및 인증
SSO 후 토큰 발행
SAML assertion 유효성 검사 후, 플랫폼은 사용자 ID, 조직, 역할(SCIM 그룹 멤버십에서 파생), 인증 방법 및 ID 공급자에 대한 클레임을 포함하는 테넌트 범위의 JWT를 발행합니다. 이는 SSO와 다른 인증 방법 간의 감사 차별화를 가능하게 합니다.
세션 관리
- SSO 세션은 Okta의 세션 수명을 따릅니다
- 사용자가 Okta에서 로그아웃할 때 세션 종료를 위한 Single Logout (SLO) 지원
- 즉각적인 세션 취소를 위한 백채널 로그아웃 웹훅
- SCIM 비활성화는 60초 이내에 모든 활성 세션을 취소합니다
보안 제어
- 테넌트의 X.509 인증서에 대한 SAML 응답 서명 유효성 검증
- 일회용 추적을 통한 assertion 재사용 방지
- assertion 타임스탬프 유효성 검증을 위한 클럭 스큐 허용 오차
- Audience restriction 유효성 검증
- 민감한 배포를 위한 암호화된 assertion 지원
- 테넌트별 Bearer 토큰을 통한 SCIM 엔드포인트 인증
- SCIM 엔드포인트에 대한 Rate limiting
---
관리자 구성 대시보드
테넌트 SSO 설정
관리자 대시보드는 셀프 서비스 설정 흐름을 제공합니다:
- 프로토콜 선택 — SAML 2.0 또는 OIDC 선택
- 메타데이터 업로드 — IdP 메타데이터 XML 업로드 (구성을 자동으로 채움)
- 속성 매핑 — ID 공급자 프로필 필드를 플랫폼 사용자 필드에 매핑
- 도메인 확인 — SSO 라우팅을 위한 이메일 도메인 소유권 확인
- 연결 테스트 — 모든 사용자에 대해 활성화하기 전에 테스트 SSO 로그인 시작
- SCIM 설정 — SCIM 프로비저닝 구성을 위한 Bearer 토큰 생성
- 그룹 매핑 — ID 공급자 그룹을 플랫폼 역할 및 계층에 매핑
대시보드는 또한 손쉬운 ID 공급자 앱 구성을 위한 다운로드 가능한 SP 메타데이터를 제공합니다. ---
주요 기능
- SAML 2.0 + OIDC 지원 — 테넌트별 유연한 프로토콜 선택
- SCIM 2.0 프로비저닝 — 자동화된 사용자 생성, 업데이트 및 비활성화
- 그룹-역할 매핑 — ID 공급자 그룹이 플랫폼 액세스 계층 및 프로그램을 제어
- 즉각적인 역할 해제 — SCIM 비활성화는 60초 이내에 액세스를 취소
- 멀티테넌트 SSO 라우팅 — 테넌트 전반에 걸친 이메일 도메인 기반 IdP 검색
- 공존하는 인증 방법 — 이메일/비밀번호 및 Google OAuth와 함께 SSO
- 셀프 서비스 설정 — 엔지니어링 지원 없이 SSO 구성을 위한 관리자 대시보드
- 단일 로그아웃 — 사용자가 ID 공급자에서 로그아웃할 때 플랫폼 세션 종료
- 감사 추적 — 규정 준수를 위해 모든 SCIM 작업 및 SSO 이벤트 기록
- SCIM 그룹 동기화 — ID 공급자 그룹 멤버십으로부터 실시간 역할 및 프로그램 변경
결과
기술 스택
caseStudyDetail.more 사례 연구
더 많은 기술 구현 사례를 살펴보세요
자주 묻는 질문
MicrocosmWorks는 Okta와 헬스 및 웰니스 플랫폼 간의 자동 사용자 프로비저닝 및 프로비저닝 해제를 가능하게 하기 위해 SCIM 2.0 프로토콜을 구현했습니다. 따라서 IT admin이 Okta 디렉터리에서 사용자를 추가, 수정 또는 제거할 때, 이러한 변경 사항은 몇 초 내에 애플리케이션으로 전파됩니다. 이는 IT 팀이 이전에 support ticket을 통해 처리했던 수동 계정 생성, 권한 업데이트 및 오프보딩 작업을 제거하여 access management overhead를 약 90%까지 줄입니다.
MicrocosmWorks는 Okta 그룹 멤버십을 애플리케이션 수준 역할 및 권한으로 변환하는 구성 가능한 역할 매핑 계층을 구축했습니다. 이는 직접적인 그룹-역할 매핑과 여러 그룹 멤버십을 결합하는 복잡한 규칙을 모두 지원합니다. 사용자의 Okta 그룹 멤버십이 Okta에서 변경되면 SCIM 통합은 실시간으로 해당 애플리케이션 권한을 업데이트하며, 시스템은 감사 규정 준수를 위해 모든 권한 변경 사항을 기록합니다.
MicrocosmWorks는 SCIM 프로비저닝 해제 이벤트를 모니터링하여 비활성화된 사용자의 모든 장치 및 브라우저에서의 모든 활성 세션을 즉시 무효화하는 실시간 세션 철회를 구현했습니다. 시스템은 토큰 만료를 기다리지 않고, Okta 이벤트 발생 수 초 내에 세션 저장소로 철회를 적극적으로 푸시합니다. 이는 직원이 해고되어 즉각적인 액세스 제거가 필요할 때 보안 규정 준수에 매우 중요합니다.
네, MicrocosmWorks는 인증 레이어를 설계하여 Okta의 라우팅 규칙을 통해 여러 동시 ID 공급자를 지원합니다. 이를 통해 서로 다른 기업 디렉터리의 사용자가 동일한 애플리케이션 인스턴스에 액세스하는 동안 각자의 IdP를 통해 인증할 수 있습니다. 이는 합병된 조직이 별도의 Active Directory 도메인을 유지하는 M&A 전환 중에 필수적이며, 시스템은 IdP 간의 속성 매핑 차이를 투명하게 처리합니다.
MicrocosmWorks는 Okta SSO 및 SCIM 통합을 시간당 $25-$45의 요율로 구현하며, 역할 매핑의 복잡성과 동기화해야 하는 기존 사용자 속성의 수에 따라 일반적인 통합 작업은 3-6주가 소요됩니다. 이 투자는 수동 사용자 관리의 지속적인 비용과 지연된 액세스 취소로 인한 보안 위험에 비하면 극히 일부에 불과하며, 종종 엔터프라이즈 판매 계약 체결을 위한 필수 요건이기도 합니다.