본문으로 건너뛰기
Cloud availabilityOSS availability

IdP-initiated SSO (SAML 전용)

IdP-initiated SSO는 아이덴티티 제공자 (IdP)가 인증 (Authentication) 흐름을 주로 제어하는 싱글 사인온 (SSO) 프로세스입니다. 이 프로세스는 사용자가 회사 포털이나 중앙 아이덴티티 대시보드와 같은 IdP의 플랫폼에 로그인할 때 시작됩니다. 인증이 완료되면, IdP는 SAML 어설션을 생성하고 사용자를 서비스 제공자 (SP)로 리디렉션하여 애플리케이션 또는 서비스에 접근할 수 있도록 합니다.

IdP-initiated SSO

위험 및 고려사항

IdP-initiated SSO는 조직이 인지해야 할 여러 보안 취약점을 초래할 수 있습니다. 인증 (Authentication) 프로세스가 사용자의 직접적인 요청 없이 IdP에 의해 시작되기 때문에, 교차 사이트 요청 위조 (CSRF) 등 다양한 공격에 취약할 수 있습니다.

사용자 주도의 인증이 없으면 적절한 보호 장치가 마련되지 않은 경우 무단 접근이 발생할 수 있습니다. 또한, 단일 인증 지점에 의존하기 때문에 IdP가 침해될 경우 모든 연결된 애플리케이션이 노출될 위험이 커집니다.

따라서, 사용자가 서비스에 명시적으로 접근을 요청하는 보다 안전하고 통제된 인증 흐름을 제공하는 SP-initiated SSO 사용을 강력히 권장합니다.

Logto OIDC 애플리케이션과 IdP-initiated SSO 연결하기

Logto는 OpenID Connect (OIDC) 제공자로서 IdP-initiated SSO를 지원하지 않습니다. 그러나 Logto를 SP로 구성하여 SAML을 사용해 엔터프라이즈 IdP와 IdP-initiated SSO를 지원할 수 있습니다. 이 설정을 통해 Logto의 인증 (Authentication) 기능을 활용하면서도 인증 흐름에 대한 IdP의 제어를 유지할 수 있습니다.

노트:

기본적으로 이 기능은 Logto에서 활성화되어 있지 않습니다. 테넌트에 IdP-initiated SSO가 필요하다면, 지원팀 에 문의해 주세요.

사전 준비 사항

IdP-initiated SSO를 구성하기 전에 먼저 SAML 커넥터를 생성해야 합니다. 콘솔 > 엔터프라이즈 SSO로 이동하여 단계별 가이드에 따라 IdP와 함께 SAML 커넥터를 설정하세요.

SAML 커넥터 설정이 완료되면, Sign-in & account > Sign-up and sign-in 섹션에서 SSO 로그인 방식을 활성화하고, SP-initiated SSO 흐름을 테스트하여 구성이 올바른지 확인하세요. IdP-initiated SSO를 진행하기 전에 SP-initiated SSO가 정상적으로 동작하는지 반드시 확인해야 합니다.

IdP-initiated SSO 활성화하기

테넌트에 IdP-initiated SSO 기능이 활성화되면, SAML 커넥터 설정 페이지에 IdP-initiated SSO라는 추가 탭이 표시됩니다. 해당 커넥터에 대해 IdP-initiated SSO 토글을 활성화하여 기능을 켜세요.

SP 애플리케이션 선택하기

SP-initiated SSO와 달리, 인증 (Authentication) 흐름이 SP에서 시작되는 것이 아니라, IdP-initiated SSO는 인증 과정 후 사용자를 리디렉션할 클라이언트 측 SP 애플리케이션이 필요합니다. Default application 드롭다운에서 등록된 애플리케이션 목록 중 SP 애플리케이션을 선택할 수 있습니다.

IdP-initiated SSO는 Traditional Web AppSingle Page App 애플리케이션만 지원합니다. 사용 사례에 맞는 애플리케이션 유형을 반드시 선택하세요.

노트:

IdP 측에서는 IdP-initiated SSO 흐름이 올바르게 동작하도록 RelayState 파라미터를 비워둬야 합니다. Logto가 선택한 기본 SP 애플리케이션에 따라 리디렉션을 처리합니다.

IdP-initiated 인증 (Authentication) 흐름 구성하기

IdP-initiated SAML SSO를 OIDC와 연결하기 위해, Logto는 인증 (Authentication) 요청을 처리할 두 가지 구성 옵션을 제공합니다.

IdP가 SSO 흐름을 시작하고 SAML 어설션을 Logto로 전송하면, IdP-initiated SSO 어설션 세션이 생성됩니다. Logto는 사용자를 기본 SP 애플리케이션으로 리디렉션하여 클라이언트 측에서 표준 OIDC 인증 (Authentication) 요청을 시작합니다.

이 옵션을 설정하려면, SAML 커넥터 설정의 IdP-initiated SSO 탭에서 Redirect to client for SP-initiated authentication 카드를 선택하세요.

SP-initiated SSO flow
  1. Client redirect URL을 입력하여 IdP-initiated SSO 흐름 이후 사용자를 기본 SP 애플리케이션으로 리디렉션합니다. Logto는 이 URL에 ?ssoConnectorId={connectorId} 쿼리 파라미터를 추가하여 사용자를 리디렉션합니다. 클라이언트 애플리케이션은 이 리디렉션을 처리하고 OIDC 인증 (Authentication) 요청을 시작해야 합니다. (IdP-initiated SSO 인증 (Authentication) 요청을 처리할 전용 라우트 또는 페이지를 클라이언트 애플리케이션에 두는 것을 권장합니다.)

  2. 클라이언트 측에서 ssoConnectorId 쿼리 파라미터를 사용하여 IdP-initiated SSO 인증 (Authentication) 흐름을 시작한 SAML 커넥터를 식별하고 OIDC 인증 (Authentication) 요청을 처리합니다.

  3. direct sign-in 인증 (Authentication) 파라미터를 로그인 요청에 포함하여 Logto에 SSO 인증 (Authentication) 흐름을 완료하도록 전달합니다.

// React 예시
import { Prompt, useLogto } from '@logto/react';
import { useEffect } from 'react';
import { useNavigate, useSearchParams } from 'react-router-dom';

const SsoDirectSignIn = () => {
const { signIn } = useLogto();
const [searchParams] = useSearchParams();

useEffect(() => {
const ssoConnectorId = searchParams.get('ssoConnectorId');
if (ssoConnectorId) {
void signIn({
redirectUri,
prompt: Prompt.Login,
directSignIn: {
method: 'sso',
target: ssoConnectorId,
},
});
}
}, [searchParams, signIn]);
};
  • redirectUri: OIDC 인증 (Authentication) 흐름이 완료된 후 사용자를 리디렉션할 redirect_uri.
  • prompt=login: 사용자가 IdP-initiated SSO 아이덴티티로 로그인하도록 강제합니다.
  • directSignIn=sso:{connectorId}: 직접 로그인 방식을 sso로, 대상 SAML 커넥터 ID로 지정합니다. 이 파라미터는 로그인 페이지를 표시하지 않고 SSO 인증 (Authentication) 흐름을 직접 트리거합니다. 커넥터 ID가 일치하고 세션이 유효하다면 사용자는 자동으로 인증 (Authentication)됩니다.

이 방법은 인증 (Authentication) 흐름이 안전하게 표준 OIDC 프로토콜을 따르면서도, 인증 (Authentication) 과정에 대한 IdP의 제어를 유지할 수 있도록 합니다. 클라이언트 앱은 추가 로그인 단계 없이 IdP-initiated SSO 어설션 세션을 활용해 사용자를 인증 (Authentication)할 수 있으며, 인증 (Authentication) 흐름의 보안과 통제도 유지할 수 있습니다. 또한 클라이언트 앱은 statePKCE 파라미터를 검증하여 인증 (Authentication) 요청의 보안을 확보할 수 있습니다.

노트:

이 방법은 Traditional Web AppSingle Page App 애플리케이션 모두에서 사용할 수 있습니다. 모든 사용 사례에 권장됩니다.

옵션 B: IdP-initiated SSO로 사용자를 직접 인증 (Authentication)하기

특정 상황에서는 SP가 IdP-initiated SSO 콜백을 처리하거나 OIDC 인증 (Authentication) 요청을 시작할 수 없을 수 있습니다. 이 경우, Logto는 IdP-initiated SSO 어설션 세션으로 사용자를 직접 인증 (Authentication)하는 대체 옵션을 제공합니다.

이 옵션은 보안상 덜 안전하며 권장되지 않습니다. 인증 (Authentication) 흐름이 표준 OIDC 프로토콜을 우회합니다. 인증 (Authentication) 요청이 IdP에 의해 시작되므로, 클라이언트 앱이 인증 (Authentication) 요청을 안전하게 검증하지 못할 수 있습니다. 예를 들어, 클라이언트 앱이 인증 (Authentication) 요청의 statePKCE 파라미터를 검증할 수 없습니다.

경고:

이 방법은 Single Page App 애플리케이션에서는 사용할 수 없습니다. 클라이언트 앱이 PKCE 파라미터를 사용해 인증 (Authentication) 요청을 안전하게 처리해야 하기 때문입니다. SPA 애플리케이션에서 IdP-initiated SSO를 구현해야 한다면 위의 옵션을 사용하세요.

이 옵션을 구성하려면, SAML 커넥터 설정의 IdP-initiated SSO 탭에서 Directly sign-in using IdP-initiated SSO 옵션을 선택하세요.

IdP-initiated SSO flow
  1. 인증 (Authentication) 성공 후 사용자를 클라이언트 애플리케이션으로 다시 리디렉션할 Post sign-in redirect URI를 선택하세요. 이 URL은 OIDC 인증 (Authentication) 요청의 redirect_uri로 사용됩니다. URI는 클라이언트 애플리케이션에 등록된 허용된 리디렉션 URI 중 하나여야 합니다.

    노트:

    IdP-initiated SSO를 위해 전용 redirect URI를 사용하는 것을 강력히 권장합니다. 인증 (Authentication) 요청이 비동기적으로 발생하므로, 클라이언트 애플리케이션은 표준 SP-initiated 인증 (Authentication) 흐름과 별도로 응답을 독립적으로 관리해야 합니다.

  2. 필요하다면 Additional authentication parameters JSON 에디터(타입 Map<string,string> 준수)를 사용해 인가 (Authorization) 요청 파라미터를 커스터마이즈할 수 있습니다.

    예시: 기본적으로 Logto는 openidprofile 스코프만 요청합니다. 인증 (Authentication) 요청에 추가 스코프나 파라미터를 추가할 수 있습니다.

    {
    "scope": "email offline_access"
    }
    • 사용자의 이메일 주소를 요청하려면 추가 email 스코프를 추가합니다.
    • 리프레시 토큰을 요청하려면 offline_access 스코프를 추가합니다.

    또한 인증 (Authentication) 응답을 안전하게 검증하기 위해 커스텀 state 파라미터를 제공하는 것도 권장합니다.

    {
    "state": "custom-state-value"
    }

    클라이언트 앱은 인가 코드 응답에서 state 파라미터를 검증하여 인증 (Authentication) 요청이 유효한지 확인해야 합니다.