フェデレーションSSOに使用するIdPの決定
サービス・プロバイダとして、フェデレーションSSO操作をトリガーする場合、SPに複数のIdPsの信頼契約がある場合、SSOフローにどのIdPが選択されるかを決定することが主な課題となる場合があります。
OAM/SPには、フェデレーションSSO操作に対してIdPを選択するメカニズムが異なります。次に例を示します。
-
使用するIdPを示すOAMフェデレーション・スキームがあること
-
カスタムOAM認証プラグインを使用して、使用するIdPを設定します。
-
IdPがスキームまたはカスタム・プラグインで指定されていない場合、SAML 2.0 IdP検出サービスの使用
-
IdP検出サービスが使用されていない場合のデフォルトのSSO IdPの使用
次のセクションでは、各メカニズムについて詳しく説明します。
OAMフェデレーション・スキーム
OAMには、次のようなOAM認証スキームを作成するための管理ツールが用意されています。
-
フェデレーション・スキーム
-
特定のIdPパートナにバインド
リソースがその種類の認証スキームで保護されている場合、非認証ユーザーがアクセスをリクエストすると、スキームがバインドされているIdPパートナを使用してフェデレーションSSOフローがトリガーされます。
このようなスキームを作成すると、管理者は特定のリソースを持つことができ、その結果、特定のIdPパートナとのフェデレーションSSOになります。
ノート: レベルが十分な有効なセッションでユーザーがすでに認証されている場合、他のフェデレーション・スキームによって保護されているリソースにアクセスすると、新しいフェデレーションSSOが生成されないことがあります。
OAM管理コンソール
特定のIdPパートナのOAM認証スキームを作成するには、次のステップを実行します。
-
OAM管理コンソール(
http(s)://OAM-admin-host:OAM-adminport/oamconsole
)に移動します。 -
「アイデンティティ・フェデレーション」、「サービス・プロバイダ管理」に移動します。
-
スキームを作成するIdPパートナを開きます。
-
「認証スキームおよびモジュールの作成」ボタンをクリックします。
OAM管理コンソールによって、次のものが作成されます。
-
<PARTNER_NAME>FederationPlugin
という名前のこのIdPパートナにバインドされているOAM認証モジュール。 -
新しく作成された
<PARTNER_NAME>FederationScheme
という名前のOAM認証モジュールにバインドされたOAM認証スキーム。
図OAM_Admin_Console_with_message.jpgの説明
WLSTコマンド
OAM WLSTのcreateAuthnSchemeAndModule()
コマンドを使用して特定のIdPパートナのOAM認証スキームを作成するには、次のステップを実行します。
-
$IAM_ORACLE_HOME/common/bin/WLST.sh
を実行して、WLST環境を入力します。 -
WLS管理サーバー(
connect()
)に接続します。 -
「ドメイン・ランタイム」ブランチ
domainRuntime()
に移動します。 -
createAuthnSchemeAndModule()
コマンドを実行します: IdPパートナ名を指定します。例:createAuthnSchemeAndModule("AcmeIdP")
。 -
WLST環境
exit()
を終了します。
ノート: このようなフェデレーション・スキーム/モジュールを削除するには、OAM WLSTの
deleteAuthnSchemeAndModule()
コマンドを実行します。
リソースの保護
特定のIdPパートナでフェデレーションSSOをトリガーする<PARTNER_NAME>FederationScheme
を使用してリソースを保護するには、次のステップを実行します。
-
OAM管理コンソール(
http(s)://OAM-admin-host:OAM-adminport/oamconsole
)に移動します。 -
「アクセス・マネージャ」、「アプリケーション・ドメイン」にナビゲートします。
-
「検索」をクリックし、新しい
FederationScheme
で保護するリソースを含むアプリケーション・ドメインを開きます。 -
「認証ポリシー」タブをクリックします。
-
新しい認証ポリシーを作成するか、既存の認証ポリシーを編集します。
-
新しい
FederationScheme
を選択します。 -
「適用」をクリックします。
図Authentication_Policies.jpgの説明
この変更を行った後、ユーザーがこの認証ポリシーによって保護されているリソースをリクエストし、ユーザーを認証する必要がある場合、特定のIdPパートナ(この例ではAcmeIdP)を使用してフェデレーションSSOが実行されます。
カスタムOAM認証プラグ
概要
OAM認証モジュールは次のとおりです。
-
認証プラグインのコレクション
-
プラグインの実行順序を決定するオーケストレーション
OOTBフェデレーション認証モジュール(FederationPlugin
)は、次の2つのプラグインで構成されています。
-
FedAuthnRequestPlugin: フェデレーションSSOフローを開始し、使用するIdPを決定し、SSOリクエストを作成し、ユーザーをIdPにリダイレクトします
-
AssertionProcessing: 受信SAML/OpenID SSOレスポンスを処理し、メッセージをLDAPディレクトリのローカル・ユーザー・レコードにマップします
オーケストレーションは次の方法で確認できます。
-
OAM管理コンソール(
http(s)://OAM-admin-host:OAM-adminport/oamconsole
)に移動します。 -
「アクセス・マネージャ」、「認証モジュール」にナビゲートします。
-
FederationScheme
を開きます。 -
「ステップ」タブをクリックして、プラグインを表示します。
-
「ステップ・オーケストレーション」タブをクリックして、様々なプラグインと操作の開始に使用されるプラグイン間のオーケストレーションを確認します。
カスタム・プラグインの実装
カスタム・プラグインは、特定のフェデレーションSSO操作に使用するIdPを決定するOAMカスタム認証プラグイン・フレームワークに基づいて実装できます。
-
プラグインは、特定のアプローチ(Cookie、ページ経由のユーザー選択、プログラムなど)を介して使用する必要があるIdPを決定します。
-
選択が完了すると、プラグインは、
AuthenticationContext
に保存される資格証明インスタンスにIdPパートナ名を保存する必要があります -
プラグインは成功ステータスを返します
-
OAMは、
AuthenticationContext
からIdPパートナ名を取得する次のプラグイン(FedAuthnRequestPlugin
)を起動します。 -
フェデレーションSSOは、そのIdPで開始されます。
IdPパートナ名をAuthenticationContext
に保存するコードは、次のようになります。
public ExecutionStatus
process(AuthenticationContext context)
{
...
CredentialParam param = new CredentialParam();
param.setName("KEY_FEDIDP");
param.setType("string");
param.setValue(IDP_PARTNER_NAME);
context.getCredential().addCredentialParam("KEY_FEDIDP", param);
...
return ExecutionStatus.SUCCESS;
}
プラグインの実装後:
-
パッケージ、アップロード、配布、アクティブ化が必要です。
-
3つのプラグインを使用して新しい認証モジュールを作成する必要があります
-
カスタム・プラグイン
-
FedAuthnRequestPlugin
-
AssertionProcessing
-
-
オーケストレーションは次を使用して設定する必要があります。
-
初期ステップ・カスタム・プラグインであるカスタム・プラグイン:
-
成功すると、
FedAuthnRequestPlugin
が起動されます -
「失敗」の場合、エラー時に失敗が返されます。
-
-
FedAuthnRequestPlugin:
-
成功の場合、成功が返されます。
-
失敗時には、AssertionProcessingを起動する必要があります
-
エラーの場合、失敗が返されます。
-
-
カスタム・プラグイン:
-
成功の場合、成功が返されます。
-
「失敗」の場合、エラー時に失敗が返される必要があります。
-
-
-
新しいOAM認証モジュールを使用して、新しいOAM認証スキームを作成する必要があります。新しいスキームは、OOTB FederationSchemeと似ている必要があります。
最後に、新しいOAMスキーム(カスタム認証モジュール/プラグインを使用してフェデレーションSSO操作を実行する)を使用してリソースを保護できます。
ノート: OAM開発者ガイドのカスタム・プラグインの詳細を参照してください。
IdP検出サービス
概要
「アイデンティティ・プロバイダ検出サービス・プロトコルおよびプロファイル」SAML 2.0仕様では、SAML 2.0 SPがIdP選択をリモート・サービスに委任する方法を定義します。
フローはSAML 2.0仕様で説明されており、次のステップで構成されています。
-
SPは、リモートのIdP検出サービスを使用して、フェデレーションSSO操作に使用するIdPを決定するように構成されています。
-
SPは、302 HTTPリダイレクトを介してユーザーをIdP検出サービスにリダイレクトし、問合せ文字列に次のパラメータを提供します。
-
entityID
: OAM/SPの発行者/ProviderID -
returnIDParam
: ユーザーをOAM/SPにリダイレクトするときに、IdP ProviderID値を含むパラメータに対してサービスで使用する必要がある問合せ文字列パラメータの名前 -
return
: ユーザーをOAM/SPにリダイレクトするために使用するURL
-
-
サービスによって、使用するIdPが決定されます。
-
サービスは、SPで指定された問合せパラメータ「return」に基づいて302 HTTPリダイレクトを介してユーザーをOAM/SPにリダイレクトし、問合せ文字列に次のパラメータを提供します。
-
IdP ProviderID値を含む問合せパラメータ。その問合せパラメータの名前は、SPによってreturnIDParam問合せパラメータで指定されます。
-
OAM/SPの構成
任意のリモートIdP検出サービスを使用するようにOAM/SPを構成できます。OAMには、単純なIdP検出サービスが含まれており、これを使用してフェデレーションSSOを実行するIdPを選択できます。IdP検出サービスを使用するようにOAM/SPを構成するには、次のステップを実行します。
-
$IAM_ORACLE_HOME/common/bin/WLST.sh
を実行して、WLST環境を入力します。 -
WLS管理サーバー(
connect()
)に接続します。 -
「ドメイン・ランタイム」ブランチ
domainRuntime()
に移動します。 -
OAM/SPを有効化/無効化して、IdP検出サービス:
putBooleanProperty("/spglobal /idpdiscoveryserviceenabled", "true/false")
を使用します。-
有効にするには:
putBooleanProperty("/spglobal /idpdiscoveryserviceenabled", "true")
-
putBooleanProperty("/spglobal /idpdiscoveryserviceenabled", "false")
を無効にするには
-
-
リモートIdP検出サービスの場所を
putStringProperty("/spglobal /idpdiscoveryserviceurl", "URL")
に設定します。 -
URLをサービスの場所に置き換えます。
-
バンドルされた単純なIdP検出サービスの場合、URLを
/oamfed/discovery.jsp
に置き換えます(これはこのプロパティのOOTB値です):putStringProperty("/spglobal /idpdiscoveryserviceurl", "/oamfed/discovery.jsp")
。 -
リモート・サービスの例:
putStringProperty("/spglobal /idpdiscoveryserviceurl", "http://sp.com/discovery")
。
-
-
WLST環境
exit()
を終了します。
バンドルされた単純なIdP検出サービスを使用するには、次のステップを実行します。
-
$IAM_ORACLE_HOME/common/bin/WLST.sh
を実行して、WLST環境を入力します。 -
WLS管理サーバー(
connect()
)に接続します。 -
「ドメイン・ランタイム」ブランチ
domainRuntime()
に移動します。 -
バンドルされたIdP検出サービス
putBooleanProperty("/spglobal /idpdiscoveryservicepageenabled", "true/false")
を有効または無効にします。-
有効にするには:
putBooleanProperty("/spglobal /idpdiscoveryservicepageenabled", "true")
。 -
putBooleanProperty("/spglobal /idpdiscoveryservicepageenabled", "false")
を無効化します。
-
-
WLST環境
exit()
を終了します。
テスト
テスト環境では、次の3つのIdPsがあります。
-
AcmeIdP: SAML 2.0 IdP
-
Google: Google OpenID OP
-
Yahoo: Yahoo OpenID OP
OAM/SPは次のように構成されます。
-
IdP検出サービスの使用
-
バンドルされた単純なIdP検出サービスにユーザーをリダイレクトします
-
バンドルされた単純なIdP検出サービスを有効にする
ユーザーがFederationScheme
で保護されているリソースへのアクセスをリクエストすると、バンドルされた単純なIdP検出サービスによって、フェデレーションSSOを実行するためのIdPの選択がユーザーに求められます。
デフォルトSSOアイデンティティ・プロバイダ
フェデレーションSSOに使用されるIdPを示すために前述のどのメソッドも使用されていない場合、OAM/SPはデフォルトSSOアイデンティティ・プロバイダとしてマークされたIdPパートナを使用します。
OAM管理コンソール
特定のIdPパートナがOAM管理コンソールを介してデフォルトのSSOアイデンティティ・プロバイダであることを示すには、次のステップを実行します。
-
OAM管理コンソール(
http(s)://OAM-admin-host:OAM-adminport/oamconsole
)に移動します。 -
「アイデンティティ・フェデレーション」、「サービス・プロバイダ管理」に移動します。
-
IdPパートナを開きます。
-
「デフォルトのアイデンティティ・プロバイダ・パートナ」ボックスにチェックマークを入れます。
-
「適用」をクリックします。
図Default_Identity_Provider.jpgの説明
WLSTコマンド
OAM WLSTのsetDefaultSSOIdPPartner()
コマンドを使用して、特定のIdPパートナがデフォルトのSSOアイデンティティ・プロバイダであることを示すには、次のステップを実行します。
-
$IAM_ORACLE_HOME/common/bin/WLST.sh
を実行して、WLST環境を入力します。 -
WLS管理サーバー(
connect()
)に接続します。 -
「ドメイン・ランタイム」ブランチ
domainRuntime()
に移動します。 -
setDefaultSSOIdPPartner()
コマンドを実行します。 -
IdPパートナ名を指定します。例:
setDefaultSSOIdPPartner("AcmeIdP")
。 -
WLST環境
exit()
を終了します。
その他の学習リソース
docs.oracle.com/learnで他のラボを探すか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。
製品ドキュメントについては、Oracle Help Centerを参照してください。
Determining which IdP to use for Federation
F60233-01
September 2022
Copyright © 2022, Oracle and/or its affiliates.