IdP-initiated SSO(SAML のみ)
IdP-initiated SSO は、アイデンティティプロバイダー (IdP) が主に認証 (Authentication) フローを制御するシングルサインオン (SSO) プロセスです。このプロセスは、ユーザーが会社のポータルや集中型アイデンティティダッシュボードなど、IdP のプラットフォームにログインすることから始まります。認証 (Authentication) が完了すると、IdP は SAML アサーションを生成し、ユーザーをサービスプロバイダー (SP) にリダイレクトしてアプリケーションやサービスへアクセスさせます。
リスクと考慮事項
IdP-initiated SSO には、組織が注意すべきいくつかのセキュリティ脆弱性が存在します。認証 (Authentication) プロセスがユーザーからの直接的なリクエストなしに IdP によって開始されるため、クロスサイトリクエストフォージェリ (CSRF) など、さまざまな攻撃に対して脆弱になる可能性があります。
ユーザー主導でない認証 (Authentication) により、適切なセーフガードがない場合、不正アクセスが発生する可能性があります。さらに、単一の認証 (Authentication) ポイントに依存することで、IdP が侵害された場合、すべての接続されたアプリケーションが危険にさらされるリスクが高まります。
そのため、より安全で制御された認証 (Authentication) フローを提供する SP-initiated SSO の利用が強く推奨されます。これにより、ユーザーが明示的にサービスへのアクセスをリクエストすることが保証されます。
IdP-initiated SSO を Logto OIDC アプリケーションと連携する
Logto は OpenID Connect (OIDC) プロバイダーとして、IdP-initiated SSO をサポートしていません。ただし、Logto を SP として設定し、エンタープライズ IdP と SAML を使って IdP-initiated SSO をサポートすることができます。このセットアップにより、IdP 側で認証 (Authentication) フローを制御しつつ、Logto の認証 (Authentication) 機能を活用できます。
この機能はデフォルトでは Logto で有効になっていません。テナントで IdP-initiated SSO を有効にする必要がある場合は、サポートチーム までご連絡ください。
前提条件
IdP-initiated SSO を設定する前に、まず SAML コネクターを作成する必要があります。コンソール > エンタープライズ SSO に移動し、SAML コネクターを IdP と連携するためのステップバイステップガイドに従ってください。
SAML コネクターのセットアップが完了したら、サインイン & アカウント > サインアップとサインイン セクションで 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 では認証 (Authentication) プロセス後にユーザーをリダイレクトするクライアント側の SP アプリケーションが必要です。Default application ドロップダウンから登録済みアプリケーションの中から SP アプリケーションを選択できます。
IdP-initiated SSO では Traditional Web App および Single Page App アプリケーションのみがサポートされています。ユースケースに応じて適切なアプリケーションタイプを選択してください。
IdP 側では、IdP-initiated SSO フローが正しく動作するように RelayState パラメーターを 空 にしてください。Logto は選択されたデフォルト SP アプリケーションに基づいてリダイレクトを処理します。
IdP-initiated 認証 (Authentication) フローの設定
IdP-initiated SAML SSO を OIDC と連携するために、Logto では認証 (Authentication) リクエストを処理するための 2 つの設定オプションを提供しています。
オプション A: デフォルト SP アプリケーションへリダイレクト(推奨)
IdP が SSO フローを開始し、SAML アサーションを Logto に送信すると、IdP-initiated SSO アサーションセッションが作成されます。Logto はユーザーをデフォルト SP アプリケーションにリダイレクトし、クライアント側で標準の OIDC 認証 (Authentication) リクエストを開始します。
このオプションを設定するには、SAML コネクター設定の IdP-initiated SSO タブで SP-initiated 認証 (Authentication) のためにクライアントへリダイレクト カードを選択します。
-
クライアントリダイレクト URL を指定し、IdP-initiated SSO フロー後にユーザーをデフォルト SP アプリケーションへリダイレクトします。Logto はこの URL に
?ssoConnectorId={connectorId}クエリパラメーターを付与してリダイレクトします。クライアントアプリケーション側でこのリダイレクトを処理し、OIDC 認証 (Authentication) リクエストを開始してください。(IdP-initiated SSO 認証 (Authentication) リクエストを処理する専用のルートやページをクライアントアプリケーションに用意することを推奨します。) -
クライアント側で
ssoConnectorIdクエリパラメーターを利用し、IdP-initiated SSO 認証 (Authentication) フローを開始した SAML コネクターを特定して OIDC 認証 (Authentication) リクエストを処理します。 -
サインインリクエストで ダイレクトサインイン 認証 (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 が一致し、セッションが有効な場合、保存された IdP-initiated SSO アサーションセッションを使って自動的に認証 (Authentication) されます。
この方法により、認証 (Authentication) フローが安全かつ標準の OIDC プロトコルに従いながら、IdP 側で認証 (Authentication) プロセスを制御できます。クライアントアプリは追加のログインステップなしで IdP-initiated SSO アサーションセッションを利用してユーザーを認証 (Authentication) でき、認証 (Authentication) フローの安全性と制御性を維持できます。クライアントアプリは state や PKCE パラメーターの検証も引き続き行えます。
この方法は Traditional Web App および Single Page App アプリケーションの両方で利用可能です。すべてのユースケースで推奨されます。
オプション B: IdP-initiated SSO で直接ユーザーを認証 (Authentication) する
特定の状況では、SP が IdP-initiated SSO コールバックを処理し OIDC 認証 (Authentication) リクエストを開始できない場合があります。この場合、Logto は IdP-initiated SSO アサーションセッションを使ってユーザーを直接認証 (Authentication) する代替オプションを提供します。
このオプションは安全性が低く、推奨されません。認証 (Authentication) フローが標準の OIDC プロトコルをバイパスします。認証 (Authentication) リクエストが IdP によって開始されるため、クライアントアプリは認証 (Authentication) リクエストを安全に検証できない場合があります。例えば、state や PKCE パラメーターの検証ができません。
この方法は Single Page App アプリケーションでは利用できません。PKCE パラメーターを使って認証 (Authentication) リクエストを安全に処理する必要があるためです。SPA アプリケーションで IdP-initiated SSO を実装する場合は、上記のオプションを利用してください。
このオプションを設定するには、SAML コネクター設定の IdP-initiated SSO タブで IdP-initiated SSO で直接サインイン オプションを選択します。
-
サインイン後リダイレクト URI を選択し、認証 (Authentication) 成功後にユーザーをクライアントアプリケーションへリダイレクトします。この URL は OIDC 認証 (Authentication) リクエストの
redirect_uriとして使用されます。URI はクライアントアプリケーションに登録されている許可済みリダイレクト URI のいずれかでなければなりません。注記:IdP-initiated SSO 用に専用の リダイレクト URI を使用することを強く推奨します。認証 (Authentication) リクエストが予期しないものであるため、クライアントアプリケーションは標準の SP-initiated 認証 (Authentication) フローとは独立してレスポンスを管理する必要があります。
-
必要に応じて 追加認証 (Authentication) パラメーター json エディター(型
Map<string,string>に従う)を使って認可 (Authorization) リクエストパラメーターをカスタマイズできます。例:デフォルトでは Logto は
openidとprofileスコープのみをリクエストします。追加のスコープやパラメーターを認証 (Authentication) リクエストに追加できます。{
"scope": "email offline_access"
}- 追加の
emailスコープでユーザーのメールアドレスをリクエストします。 offline_accessスコープでリフレッシュ トークンをリクエストします。
また、認証 (Authentication) レスポンスを安全に検証するためにカスタムの
stateパラメーターを指定することも推奨します。{
"state": "custom-state-value"
}クライアントアプリは認可 (Authorization) コードレスポンスで
stateパラメーターを検証し、認証 (Authentication) リクエストが有効であることを確認してください。 - 追加の