Skip to content

SSO (OIDC) ​

회사 IdP(Okta · Microsoft Entra ID · Google Workspace · Keycloak 등 OpenID Connect 지원 IdP) 계정으로 ISMS Doctor 에 로그인합니다.

누가 설정하나요

IdP 연결과 도메인 확인은 조직 소유자(OWNER), 처음 들어온 사람의 접근 요청 승인은 조직 관리자(ADMIN) 이상이 합니다.

동작 방식 ​

  • 로그인 화면의 회사 SSO 로 로그인 에 회사 이메일을 넣으면, 그 도메인을 확인한 조직의 IdP 로 이동합니다.
  • IdP 로그인이 끝나면 ISMS Doctor 가 ID 토큰(서명·발급자·대상·만료·nonce) 을 검증하고, 이 조직의 멤버만 로그인시킵니다.
  • 2단계 인증을 켠 사용자는 SSO 뒤에도 인증 앱 코드를 입력합니다.
  • IdP 에서 시작하는 로그인(IdP-initiated) 은 지원하지 않습니다 — 항상 ISMS Doctor 로그인 화면에서 시작합니다.

1. 이메일 도메인 확인 ​

SSO 로 들어오는 이메일의 도메인은 조직이 DNS 로 소유를 확인한 도메인이어야 합니다. 확인 없이 도메인을 주장할 수 있으면 다른 회사 이메일을 내세우는 IdP 로 남의 계정에 들어갈 수 있기 때문입니다.

  1. 설정 › 조직 › SSO (OIDC) 에서 도메인(예: acme.co.kr)을 추가합니다.

  2. 화면에 나온 TXT 레코드를 DNS 에 등록합니다.

    이름값
    _ismsdoctor-verification.acme.co.krismsdoctor-verification=<발급된 토큰>
  3. 몇 분 뒤 확인 을 누릅니다.

  • 무료 메일 도메인(gmail.com · naver.com 등)은 등록할 수 없습니다.
  • 한 도메인은 한 조직만 확인할 수 있습니다. 이미 다른 조직이 확인한 도메인이라면 지원팀에 문의하세요.
  • 확인된 도메인을 모두 지우면 SSO 가 자동으로 꺼집니다.

2. IdP 에 앱 등록 ​

IdP 에서 OIDC 웹 애플리케이션(authorization code 방식)을 만들고 다음을 설정합니다.

항목값
Redirect URI (Sign-in redirect)설정 화면에 표시된 주소 (예: https://<도메인>/api/auth/sso/callback)
Scopeopenid email profile
Grant typeAuthorization Code (PKCE 는 ISMS Doctor 가 자동으로 붙입니다)

발급된 Issuer URL · Client ID · Client secret 을 ISMS Doctor 설정 화면에 입력하고 저장합니다.

IdPIssuer URL 예시
Oktahttps://<회사>.okta.com (커스텀 인증 서버라면 https://<회사>.okta.com/oauth2/default)
Microsoft Entra IDhttps://login.microsoftonline.com/<테넌트 ID>/v2.0
Google Workspacehttps://accounts.google.com
Keycloakhttps://<호스트>/realms/<realm>
  • Client secret 은 KMS 로 암호화해 저장하며 다시 표시하지 않습니다. 바꿀 때만 새로 입력하세요.
  • 저장할 때 Issuer 의 /.well-known/openid-configuration 을 읽어 설정을 확인합니다. Issuer 는 https 여야 하고, 문서 안의 issuer 값이 입력값과 정확히 같아야 합니다.
  • ID 토큰에 email 클레임이 있어야 합니다 (preferred_username 은 쓰지 않습니다). Microsoft Entra ID 는 앱 등록 › 토큰 구성에서 선택적 클레임 email 을 추가하세요.
  • 이메일 확인 여부: 처음 연결(기존 멤버와 묶기)·접근 요청은 IdP 가 email_verified=true 를 보낼 때만 합니다. Entra ID 처럼 이 값을 보내지 않는 IdP 라면 "IdP 가 이메일 확인 여부를 보내지 않아도 이메일을 신뢰" 를 켜세요 — IdP 관리자만 사용자 이메일을 바꿀 수 있는 경우에만 켜야 합니다.
  • Issuer 나 Client ID 를 바꾸면(다른 IdP 로 이전) 기존 SSO 연결과 대기 중인 접근 요청이 해제됩니다. IdP 계정 식별자(sub)는 IdP 안에서만 유일해서, 새 IdP 의 다른 사람이 옛 연결로 들어오지 않게 하기 위해서입니다. 멤버는 다음 SSO 로그인 때 다시 연결됩니다.

3. 켜기 · 멤버가 아닌 사람 처리 ​

SSO 사용 을 체크하고 저장하면 켜집니다 (확인된 도메인이 하나 이상 필요).

멤버가 아닌 사람이 SSO 로 들어왔을 때:

설정동작
접근 요청으로 받고 관리자가 승인 (기본)로그인 대신 "접근 요청을 보냈습니다" 안내. 관리자가 설정 화면에서 역할(뷰어·관리자)을 골라 승인하면 다음 로그인부터 들어옵니다. 좌석 한도를 넘으면 승인되지 않습니다. 거절한 사람이 다시 SSO 로 들어오면 요청이 대기 목록에 다시 올라옵니다.
거부 (초대한 멤버만)로그인을 거부합니다. 멤버는 기존처럼 초대로 추가합니다.

보안 참고 ​

  • 한 사람의 IdP 계정(sub)은 첫 로그인 때 ISMS Doctor 사용자와 묶입니다. 나중에 IdP 에서 같은 이메일이 다른 계정에 재할당되어도 기존 사용자로 들어올 수 없습니다 (로그인 화면에 "이미 다른 SSO 계정과 연결" 안내).
  • IdP 가 이메일을 확인되지 않은 것으로 표시(email_verified=false)하면 거부합니다. 값을 보내지 않으면 조직 설정("이메일을 신뢰") 에 따릅니다.
  • 회원 탈퇴한 사용자의 SSO 연결·접근 요청은 탈퇴와 함께 지워집니다.
  • 지원 서명 알고리즘: RS256 · PS256 · ES256.
  • SSO 설정 변경·도메인 추가/확인/삭제·접근 요청 승인/거절·SSO 로그인은 감사 로그에 남습니다. 2단계 인증 사용자는 IdP 통과(auth.sso.first_factor) 로 따로 남고, 로그인 성공(auth.sso.login) 은 세션을 발급할 때만 기록합니다.
  • 현재는 SSO 를 켜도 이메일·비밀번호 로그인이 막히지 않습니다 (SSO 강제는 추후 제공).
  • SAML 은 아직 지원하지 않습니다.

문제 해결 ​

로그인 화면 안내원인 · 조치
SSO 로그인 시간이 지났거나 요청이 올바르지 않습니다10분 안에 IdP 로그인을 끝내지 못했거나 다른 탭에서 새로 시작했습니다. 처음부터 다시 시도하세요.
IdP 가 이메일 확인 여부를 알려주지 않아 계정을 연결하지 않았습니다IdP 가 email_verified 를 보내지 않습니다. IdP 설정을 확인하거나, IdP 관리자만 이메일을 바꿀 수 있다면 SSO 설정의 "이메일을 신뢰" 를 켜세요.
SSO 로그인 시도가 너무 많습니다같은 IP 에서 1분에 60번을 넘었습니다. 잠시 후 다시 시도하세요.
SSO 로그인에 실패했습니다IdP 설정(Redirect URI · Client secret · Issuer) 이 맞는지 확인하세요. 서버 로그의 [sso.callback] failed: 뒤에 원인이 남습니다.
IdP 가 알려준 이메일이 이 조직이 확인한 도메인이 아닙니다IdP 계정의 이메일 도메인을 확인하거나 해당 도메인을 추가·확인하세요.
이 조직의 멤버가 아닙니다"거부" 모드입니다. 관리자가 초대하거나 "접근 요청" 모드로 바꾸세요.