로그인이 따로 있다는 것은 재설정해야 할 비밀번호가 하나 더 있고, 누군가 퇴사할 때 닫아야 할 계정이 하나 더 있다는 뜻입니다. SAML 싱글 사인온(SSO)은 학습 관리 시스템(LMS)을 ID 공급자에 연결하여, 사용자가 업무용 계정으로 교육에 로그인하고 접근 권한이 디렉터리를 따르도록 합니다. 여기서는 SAML이 어떻게 작동하는지, Microsoft Entra ID, Okta, Google Workspace로 설정하는 과정은 어떠한지, 서비스 개시 전에 무엇을 확인해야 하는지를 설명합니다.
SAML 싱글 사인온의 작동 방식
SAML(Security Assertion Markup Language) 2.0은 서로 신뢰하는 두 시스템 사이에서 로그인 정보를 전달하기 위한 개방형 표준입니다. LMS는 사용자의 비밀번호를 볼 수 없습니다. LMS가 사용자를 ID 공급자로 보내면, ID 공급자가 (필요하다면 다단계 인증까지 거쳐) 사용자가 누구인지 확인하고, 서명된 진술과 함께 사용자를 다시 돌려보냅니다.
| 용어 | 의미 |
|---|---|
| ID 공급자(IdP) | Entra ID, Okta, Google Workspace처럼 사용자를 인증하는 시스템입니다. |
| 서비스 공급자(SP) | 사용자가 로그인하는 애플리케이션, 즉 LMS입니다. |
| 어설션 | IdP가 보내는 서명된 XML 진술입니다. 사용자가 누구인지, 언제 로그인했는지, 이메일이나 이름 같은 속성이 담겨 있습니다. |
| 엔터티 ID | 각 측의 고유한 이름입니다. 흔히 URL 형태이지만 식별자일 뿐이며, 정확히 일치해야 합니다. |
| ACS URL | Assertion Consumer Service URL로, IdP의 응답을 받는 LMS 주소입니다. |
| 서명 인증서 | IdP는 개인 키로 서명하고, LMS는 IdP의 공개 인증서로 검증하여 위조되거나 변조된 어설션을 거부합니다. |
| 메타데이터 | 엔터티 ID, 엔드포인트, 인증서를 하나로 묶어 바로 가져올 수 있는 XML 파일입니다. |
어설션은 유효 시간이 짧고 대상(SP의 엔터티 ID)을 명시합니다. SP는 만료되었거나 다른 애플리케이션을 대상으로 한 어설션을 거부합니다.
LMS에 SSO가 유용한 이유
- 추가 비밀번호가 없습니다. 사용자가 평소 쓰는 계정을 그대로 사용하므로, 다단계 인증(MFA)과 접근 정책이 교육에도 적용됩니다.
- 입사자가 빠르게 접근합니다. LMS 애플리케이션을 그룹에 할당하면 그 그룹의 신규 직원은 첫날부터 로그인할 수 있습니다.
- 퇴사자는 근원에서 접근 권한을 잃습니다. 디렉터리에서 사용자를 비활성화하면 새 LMS 세션을 시작할 수 없습니다. SAML은 계정이 아니라 로그인을 제어하므로, 퇴사 절차에 LMS 계정 보관 처리도 포함하세요.
JIT(Just-in-time) 계정 생성
JIT(Just-in-Time) 프로비저닝을 사용하면 LMS가 사용자가 처음 로그인할 때 어설션의 속성을 바탕으로 계정을 만들어 주므로, 가져올 사용자 목록이 필요 없습니다. 여기에는 안전장치를 두세요.
- 자체 이메일 도메인으로 제한하세요. 그러면 잘못 구성된 애플리케이션이나 게스트 계정이 불필요한 사용자를 만들지 않습니다.
- 새 계정에는 가장 낮은 역할을 부여하고, 관리자 권한은 의도적으로 부여하세요.
- IdP가 안정적인 식별자를 보낼 수 있다면 그것으로 사용자를 매칭하세요. 이메일 주소는 바뀔 수 있기 때문입니다.
SP 시작 로그인과 IdP 시작 로그인
- SP 시작: 사용자가 LMS를 열면 LMS가 IdP에 인증 요청을 보내고, IdP가 응답을 ACS URL로 전송합니다. 북마크와 이메일 링크에서도 작동하며, 응답이 LMS가 보낸 요청에 대한 것이므로 일반적으로 더 안전한 방식으로 여겨집니다.
- IdP 시작: 사용자가 Microsoft My Apps, Okta 대시보드, Google 앱 메뉴에서 애플리케이션 타일을 클릭하면, IdP가 요청 없이 ACS URL로 응답을 보냅니다.
두 방식을 모두 제공할 수 있으며, 각각 테스트하세요.
SAML SSO 설정 단계별 안내
순서는 어디서나 대체로 같습니다.
- 범위를 계획하세요: SSO를 사용할 사람, 애플리케이션을 할당할 그룹, 허용할 이메일 도메인, 각 사용자를 식별할 속성을 정합니다.
- LMS에서 연결을 생성하고 엔터티 ID와 ACS URL을 기록해 두세요.
- IdP에서 SAML 애플리케이션을 만들고 해당 값을 입력한 뒤, NameID 형식을 선택하고 이메일, 이름, 성 속성을 추가하세요.
- 사용자 또는 그룹을 할당하세요. 할당되지 않은 사용자는 대개 거부됩니다.
- LMS에 IdP 정보를 알려 주세요: 메타데이터 URL, 메타데이터 파일, 또는 IdP 엔터티 ID와 로그인 URL, 서명 인증서 중 하나를 사용합니다.
- 속성을 매핑하세요. IdP가 실제로 보내는 이름에 맞춥니다.
- 테스트한 다음 켜고, 무엇이 바뀌는지 사용자에게 알리세요.
공급자별 참고 사항
정확한 화면은 각 공급자의 문서에 나와 있습니다. 알아 둘 만한 점은 다음과 같습니다.
- Microsoft Entra ID: 앱 등록은 SAML을 제공하지 않으므로, 앱 등록이 아니라 갤러리에 없는 엔터프라이즈 애플리케이션을 사용하세요. 클레임 이름은 긴 URI이므로 정확히 복사하세요. 개체 ID(object ID)는 안정적인 식별자로 적합합니다. 사서함이 없는 사용자는 이메일 클레임이 비어 있을 수 있으며, 사용자 계정 이름(UPN)이 실제 주소라면 이를 대신 사용할 수 있습니다.
- Okta: SAML 2.0 앱 통합을 만드세요. 속성 문(attribute statement)의 이름은 직접 지정하므로, 대소문자까지 LMS 매핑과 정확히 일치해야 합니다. Okta의 내부 사용자 ID는 안정적인 식별자가 됩니다.
- Google Workspace: 사용자 지정 SAML 앱을 추가하고 메타데이터 파일을 다운로드하세요. 앱은 꺼진 상태로 시작하므로 알맞은 조직 단위나 그룹에 대해 켜야 합니다. 일반적인 설정에서는 기본 이메일로 사용자를 식별하므로, 이름이 바뀌거나 재사용되는 주소에 대비해 계획하세요.
테스트 체크리스트
서비스 개시 전에 시크릿 브라우저 창에서 다음을 확인하세요.
- 기존 사용자가 LMS에서 시작해 로그인하고, 앱 타일에서 시작해서도 다시 로그인합니다.
- 도메인에 속한 신규 사용자에게 올바른 역할의 계정이 생성됩니다.
- 애플리케이션에 할당되지 않은 사용자는 거부됩니다.
- 허용된 도메인 밖의 사용자는 거부됩니다.
- 이메일, 이름, 성이 올바르게 전달됩니다.
- 관리자가 복구 경로로 여전히 접속할 수 있습니다.
흔한 함정
시계 불일치(Clock skew)
IdP와 LMS의 시계가 LMS가 허용하는 범위를 넘어 어긋나면, 정상적인 어설션이 아직 유효하지 않거나 이미 만료된 것으로 거부됩니다. 주로 자체 호스팅 ID 서버에서 발생하므로, 시계를 동기화된 상태로 유지하세요.
인증서 교체
IdP 서명 인증서는 만료되며, LMS가 교체된 인증서를 신뢰하지 않으면 모든 로그인이 한꺼번에 실패합니다. 만료일을 일정에 등록해 두세요. LMS가 인증서 두 개를 신뢰할 수 있다면 새 인증서를 LMS에 먼저 추가한 다음 IdP에서 활성화하고, 그렇지 않다면 이용자가 적은 시간대에 양쪽을 동시에 전환하세요. 전환 직후 바로 테스트하세요.
속성 매핑
속성 이름은 대개 정확히 일치해야 합니다. email을 기대하는 LMS는 Email을 받아들이지 않습니다. 식별자도 확인하세요. 일시적(transient) NameID는 세션마다 바뀌고 이메일 주소도 바뀔 수 있는 반면, 영구(persistent) NameID나 변경되지 않는 ID 속성은 안정적입니다. 이메일로 사용자를 매칭한다면, 퇴사자의 주소가 다른 사람에게 재할당되기 전에 퇴사자의 계정을 보관 처리하세요.
이메일 도메인 불일치
디렉터리에는 로그인 이름이 이메일 주소가 아닌 사용자, 다른 도메인을 쓰는 협력업체 직원, 인수한 회사에서 여전히 이전 도메인을 쓰는 직원이 포함되어 있는 경우가 많습니다. LMS가 계정을 특정 도메인으로 제한한다면 이들은 거부됩니다. 서비스 개시 전에 모든 도메인을 목록으로 정리하세요.
Acadenix의 방식
SAML SSO는 Gold 요금제에서 제공되며, Entra ID, Okta, Google Workspace용 단계별 안내서가 마련되어 있습니다.
- 테스트 후 활성화. IdP 정보를 초안으로 저장하고, 공급자에서 로그인하는 방식으로 Test configuration(설정 테스트)을 실행한 다음에야 활성화합니다. 이메일 클레임이 없으면 공급자가 실제로 보낸 클레임 이름과 함께 알려 줍니다.
- 단계적 변경. 새 인증서나 테넌트는 구성 업데이트로 반영되며, 활성화하기 전까지는 현재 구성이 계속 작동합니다.
- 도메인 내 JIT. 계정이 없는 사용자는 첫 로그인 시 학습자 계정을 받으며, 이메일이 조직의 등록 도메인에 속한 경우에만 해당하고 이 기능은 끌 수 있습니다. 이미 Acadenix 계정이 있는 사용자가 IdP를 통해 처음 로그인하면, Acadenix가 연결을 확인하기 위한 일회용 코드를 이메일로 보냅니다. 이 절차는 사용자당 한 번만 진행됩니다.
- 두 가지 진입 경로. 사용자는 로그인 페이지에서 시작할 수 있으며(IdP로 바로 이동하거나 버튼을 표시할 수 있음), My Apps, Okta, Google의 타일에서 시작할 수도 있습니다.
- 연결 하나에 조직 하나. SAML 연결은 소유 조직 아래의 조직으로 전달되지 않으며, 이는 사업장이 많은 그룹에서 중요합니다.
- 복구 경로. IdP가 중단되어도 관리자는 이메일로 받은 일회용 코드로 로그인할 수 있으며, 이 기능은 끌 수 없습니다.
SAML과 함께 이메일 코드나 Google, Microsoft, LinkedIn 계정으로도 로그인할 수 있습니다. 자세한 내용은 보안 페이지를 참고하세요.
핵심 요약
- 엔터티 ID, ACS URL, 메타데이터를 교환한 다음, 안정적인 식별자와 검증된 이메일을 매핑하세요.
- JIT 계정은 자체 도메인과 가장 낮은 역할로 제한하세요.
- 서비스 개시 전에 두 가지 로그인 방식, 거부 사례, 복구 경로를 테스트하세요.
- 인증서 만료일을 일정에 등록하고, 퇴사자의 LMS 계정은 보관 처리하세요.
Acadenix를 ID 공급자에 연결하고 싶으신가요? 요금제 페이지에서 요금제를 비교하거나, 구성에 관해 문의해 주세요.


