SAMLサービスプロバイダーとしてのNetScaler
SAML サービスプロバイダー (SP) は、サービスプロバイダーによってデプロイされる SAML エンティティです。ユーザーが保護されたアプリケーションにアクセスしようとすると、SPはクライアント要求を評価します。クライアントが認証されていない (有効な NSC_TMAA または NSC_TMAS Cookie がない) 場合、SP は要求を SAML ID プロバイダー (IdP) にリダイレクトします。
また、SP は IdP から受信した SAML アサーションも検証します。
NetScalerアプライアンスをSPとして構成すると、トラフィック管理仮想サーバー(負荷分散またはコンテンツスイッチング)は、関連するSAMLアクションに関連するすべてのユーザー要求を受信します。
NetScalerアプライアンスは、ログアウト時のPOSTバインディングとリダイレクトバインディングもサポートしています。
注
NetScalerアプライアンスは、アプライアンスまたは任意の外部SAML IdP上でSAML IdPが構成されている環境では、SAML SPとして使用できます。
SAML SP、NetScalerアプライアンスとして使用する場合:
-
SAML トークンからユーザー情報 (属性) を抽出できます。その後、この情報をNetScalerアプライアンスで構成されたポリシーで使用できます。たとえば、GroupMember 属性とemailaddress 属性を抽出する場合 、SAMLAction でAttribute2 パラメーターを GroupMember として、Attribute3パラメーターを emailaddressとして指定します。
注
ユーザー名、パスワード、ログアウト URL などのデフォルト属性は、属性 1 ~ 16 で抽出しないでください。これらは暗黙的に解析され、セッションに保存されるためです。
-
受信 SAML アサーションから最大 127 バイトの属性名を抽出できます。以前の制限は 63 バイトでした。
-
ポスト、リダイレクト、アーティファクトバインディングをサポートします。
注
インフレートまたはデコード後のアサーションが 10K を超える場合は、大量のデータにリダイレクトバインディングを使用しないでください。
-
アサーションを復号化できます。
-
SAML アサーションから複数値の属性を抽出できます。これらの属性は、次のようなネストされた XML タグとして送信されます。
<AttributeValue> <AttributeValue>Value1</AttributeValue> <AttributeValue>Value2</AttributeValue> \</AttributeValue\>
注
NetScaler 13.0ビルド63.x以降では、SAML属性の個々の最大長が最大4万バイトまで許可されるようになっています。すべての属性のサイズは 40K バイトを超えてはなりません。
以前のXMLで表示される場合、NetScalerアプライアンスは、Value1のみを抽出する古いファームウェアとは対照的に、Value1とValue2の両方を特定の属性の値として抽出できます。
-
SAML アサーションの有効性を指定できます。
NetScaler SAML IdPとピアSAML SPのシステム時刻が同期していない場合、メッセージはどちらかの当事者によって無効にされる可能性があります。このような状況を回避するために、アサーションが有効な期間を設定できるようになりました。
この期間は「スキュー時間」と呼ばれ、メッセージを受け付けることができる分数を指定します。スキュータイムは SAML SP と SAML IdP で設定できます。
-
認証リクエストで「ForceAuth」という追加属性を外部 IdP (ID プロバイダー) に送信できます。デフォルトでは、ForceAuthn は「False」に設定されています。「True」に設定すると、既存の認証コンテキストに関係なくIdPに認証を強制するよう提案できます。また、アーティファクトバインディングが設定されている場合、NetScaler SPはクエリパラメータで認証リクエストを行います。
CLIを使用してNetScalerアプライアンスをSAML SPとして構成する
-
SAML SP アクションを設定します。
例
次のコマンドは、認証されていないユーザー要求をリダイレクトする SAML アクションを追加します。
add authentication samlAction SamlSPAct1 -metadataUrl "https://ksidp1.ksaaa.local/metadata/samlidp/SAML_IDP_profile" -samlIdPCertName nssp -preferredbindtype SSOREDIRECT -samlSigningCertName nssp –samlRedirectUrl https://auth1.example.com -relaystateRule "AAA.LOGIN.RELAYSTATE.EQ(\"https://lb.example1.com/\")"
注意事項
- SamLActionコマンドので
-samlIdPCertName
提供される証明書は、シグニチャの検証を成功させるには、IdP の対応する証明書と一致する必要があります。 - SAML は RSA 証明書のみをサポートします。HSM や FIPS などの他の証明書はサポートされていません。
- 式の末尾に「/」を付けた完全なドメイン名を使用することをお勧めします。
- 認証仮想サーバーが SAML IdP として構成されている場合、SAML SP アクションで使用する必要があるメタデータ URL は
https://<netscaler-saml-idp-fqdn>/metadata/samlidp/SAML_IDP_profile
です。 - 複数の SAML ポリシーが IdP チェーンの一部である場合は、最初の SAML ポリシーにのみリレーステートルールを設定すれば十分です。
このコマンドの詳細については、「https://developer-docs.netscaler.com/en-us/adc-command-reference-int/current-release/authentication/authentication-samlaction」と「https://support.citrix.com/article/CTX316577」を参照してください 。
- SamLActionコマンドので
-
SAML ポリシーを設定します。
例:
次のコマンドは、以前に定義した SAML アクションをすべてのトラフィックに適用する SAML ポリシーを定義します。
add authentication policy SamlSPPol1 -rule true -action SamlSPAct1
-
SAML ポリシーを認証仮想サーバーにバインドします。
例
次のコマンドは、SAML ポリシーを「av_saml」という名前の認証仮想サーバーにバインドします。
bind authentication vserver av_saml -policy SamlSPPol1
-
認証仮想サーバーを適切なトラフィック管理仮想サーバーにバインドします。
例
次のコマンドは、「lb1_ssl」という名前の負荷分散仮想サーバーを追加し、「av_saml」という名前の認証仮想サーバーを負荷分散仮想サーバーに関連付けます。
add lb vserver lb1_ssl SSL 10.217.28.224 443 -persistenceType NONE -cltTimeout 180 -AuthenticationHost auth1.example.com -Authentication ON -authnVsName av_saml
このコマンドの詳細については、https://developer-docs.citrix.com/projects/citrix-adc-command-reference/en/latest/authentication/authentication-samlActionを参照してください 。
GUIを使用してNetScalerアプライアンスをSAML SPとして構成する
-
SAML SP アクションを設定します。
-
[ **セキュリティ] > [AAA-ポリシー] > [認証] > [基本ポリシー] **[SAML] に移動します。
-
[ サーバ ] タブを選択し、[ 追加] をクリックし、次のパラメータの値を入力して、[ 作成] をクリックします。
パラメータの説明:
-
名前-サーバーの名前。
-
リダイレクト URL-ユーザーが認証する URL。一部のIdPには、SAML設定でないとアクセスできない特別なURLがあります。
-
シングルログアウトURL-NetScalerがクライアントをIdPに送り返してサインアウトプロセスを完了するタイミングを認識できるように指定するURL。
-
SAML バインディング-SP と IdP の間で SAML リクエスタとレスポンダのメッセージを転送するために使用されるメカニズム。NetScalerがSPとして機能する場合、ポスト、リダイレクト、アーティファクトのバインディングがサポートされます。デフォルトのバインド方法は POST です。
注:
Artifact バインディングでは、SP と IdP のトランスポートメカニズムが同じである必要があります。
-
ログアウトバインディング-SAML ログアウトメッセージの転送メカニズムを指定します。デフォルトのバインドメカニズムは Post です。
-
IdP 証明書名-SAML 署名証明書の下にある IdP 証明書証明書 (Base64)。
-
SAML IDP メタデータ URL-SAML メタデータの取得に使用されます。メタデータ URL が存在する場合、IdP 証明書名とリダイレクト URL フィールドを指定する必要はありません。
メタデータURLを構成すると、SAML IdPはSSOとログアウトのバインドタイプオプションをNetScalerに送信します。デフォルトでは、NetScalerはログアウトのバインドタイプとしてリダイレクトを選択し、SSOのバインドタイプとしてポストを選択します。
以下は、バインディングタイプのオプションを含む SAML IdP レスポンスの例です:
<?xml version=\"1.0\"?> <md:EntityDescriptor xmlns:md=\"urn:oasis:names:tc:SAML:2.0:metadata\" ID=\"_b4743282f0a1e14164b8ccd429e8cee2\" entityID=\"192.0.2.255\"> <md:SingleLogoutService Binding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP -Redirect\" Location=\"https://192.0.2.255 /cgi/tmlogout_redirect1\"></md:SingleLogoutService> <md:SingleLogoutService Binding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST\" Location=\"https://192.0.2.255 /cgi/tmlogout_post1\"></md:SingleLogoutService> <md:SingleSignOnServ ice Binding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST\" Location=\"https://192.0.2.255 /saml/login_post1\"> </md:SingleSignOnService> <md:SingleSignOnService Binding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\" Location=\"https://192.0.2.255 /saml/login_redirect1\"> </md:SingleSignOnService> </md:EntityDescriptor>
優先バインドタイプパラメータを設定することで、SSO とログアウトのデフォルトのバインドタイプを変更できます 。
-
優先バインドタイプ-SSO とログアウトの優先バインドタイプを指定します。このオプションは、リリース14.1ビルド25.x以降で使用できます。
前のSAML IdPレスポンスでは、SSOの場合、NetScalerはSAMLバインディングとしてPostを選択し、デフォルトで
https://192.0.2.255/saml/login_post1
を選択します。この動作は、SSOREDIRECT
チェックボックスを優先バインドタイプとして選択することで変更できます。前のSAML IdPレスポンスでは、NetScalerはログアウトのバインドタイプとしてリダイレクトを選択し、デフォルトで
https://192.0.2.255/cgi/tmlogout_redirect1
を選択します。この動作は、LOGOUTPOST
チェックボックスを優先バインドタイプとして選択することで変更できます。好みに応じて、どちらか一方または両方のバインドタイプを設定できます。
-
メタデータの更新間隔 (分)-指定されたメタデータ URL からメタデータを取得する間隔 (分)。
-
ユーザーフィールド- 必要に応じてSPが抽出するユーザー名を含むIdPのSAML認証フォームのセクション。
-
署名証明書名-NetScalerがIdPへの認証リクエストに署名するために使用するSAML SP証明書(秘密鍵付き)を選択します。IdP が認証要求署名を検証できるように、同じ証明書(秘密キーなし)を IdP にインポートする必要があります。ほとんどの IdP は署名証明書名を必要としません。
-
issuerName -識別子。SP と IdP の両方で指定される固有の ID で、サービスプロバイダーを相互に識別しやすくなります。
- 署名されていないアサーションを拒否-IdP からのアサーションに署名が必要な場合に指定できるオプション。デフォルトのオプションは [オン] です。
- ON: 署名のないアサーションを拒否します
- STRICT: レスポンスとアサーションの両方が署名されていることを確認します
- OFF: 署名なしのアサーションを許可します
-
Audience-IdP によって送信されたアサーションが適用可能なオーディエンス。これは通常、サービスプロバイダーを表すエンティティ名または URL です。
-
署名アルゴリズム-SAML トランザクションの署名/検証に使用されるアルゴリズム。デフォルト値は RSA-SHA256 です。
-
ダイジェスト方式-SAML トランザクションのダイジェストの計算/検証に使用されるアルゴリズム。デフォルト値は SHA256 です。
-
リレーステートルール-このパラメータの詳細については、「
relaystateRule
パラメータに関する注意点 」を参照してください。 -
状態チェックルール-SAML エンドポイントの HTTP リクエストを検証するために評価される式を設定します。
-
デフォルト認証グループ-抽出されたグループに加えて、認証が成功した場合に選択されるデフォルトグループ。
-
Group Name Field:ユーザグループを含むアサーション内のタグの名前。
-
スキュー時間(分)-このオプションでは、NetScalerサービスプロバイダーが受信アサーションで許容するクロックスキューを分単位で指定します。たとえば、16:00 にスキュー時間を 10 分に設定した場合、SAML アサーションは 15:50 から 16:10(合計 20 分)まで有効です。デフォルトのスキュー時間は 5 分です。
-
2 要素-SAML 後の第 2 要素認証を有効にします。
-
アサーションコンシューマサービスインデックス-この設定に対応するメタデータエントリのインデックス/ID。
-
属性消費サービスインデックス-IdPでの属性仕様のインデックス/ID。IdP は、このインデックスを使用して SP によって要求された属性を検索し、それらの属性を SAML アサーションで送信します。
-
リクエストされた認証コンテキスト- 応答で返される認証ステートメントのコンテキスト要件を指定します。
-
認証クラスタイプ-IdP から要求される認証クラスタイプを指定します。
-
カスタム認証クラスタイプ-SP から SAML IdP に送信される認証リクエストの一部として送信されるカスタム認証クラス参照を指定します。
-
サムプリントを送信-SAML リクエストの証明書の代わりにサムプリントを送信します。
-
ユーザー名を強制-2 要素認証の実行中に、SAML アサーションから抽出されたユーザー名をログインページで編集できるかどうかを選択します。
-
強制認証-NetScalerからリクエストを受信したIdPで認証を強制します。
- SAML レスポンスを保存-ユーザーセッションがアクティブな限り、SAML レスポンス全体を保存します。
-
-
-
対応する SAML ポリシーを作成します。
[ セキュリティ] > [AAA アプリケーショントラフィック] > [ポリシー] > [認証] > [詳細ポリシー] > [ポリシー ] に移動し、[ 追加] をクリックします。
「 認証 SAML ポリシーの作成 」ページで、次の詳細を入力します。
- 名前-SAML ポリシーの名前を指定します。
- アクションタイプ-認証アクションタイプとして SAML を選択します。
- アクション-SAML ポリシーをバインドする SAML サーバープロファイルを選択します。
- 表現-ユーザーが SAML サーバーで認証する必要があるかどうかを判断するために SAML ポリシーが使用するルールまたは式の名前を表示します。テキストボックスに「rule = true」という値を設定すると、SAML ポリシーが有効になり、対応する SAML アクションが実行されます。
-
SAML ポリシーを認証仮想サーバーにバインドします。
[セキュリティ] > [AAA-アプリケーショントラフィック] > [仮想サーバー] に移動し、SAML ポリシーを認証仮想サーバーに関連付けます。
-
認証サーバーを適切なトラフィック管理仮想サーバーに関連付けます。
[トラフィック管理] > [負荷分散](または [コンテンツスイッチング])> [仮想サーバー] に移動し、仮想サーバーを選択し、認証仮想サーバーをそれに関連付けます。
relaystateRule
パラメータに関する注意点
SAML アサーション後の認証リダイレクトをスムーズに行うには、 samlAction
コマンドの RelaysStateRule パラメーターの式を設定します。式には、認証リダイレクトの前に、単一の公開ドメイン、またはユーザーが接続したい公開ドメインのリストを含める必要があります。たとえば、式には、認証に SAML アクションを使用するフロントエンド仮想サーバー (VPN、負荷分散、またはコンテンツスイッチング) のドメインが含まれている必要があります。
末尾に (/
) が付いた完全なドメイン名を使用することをお勧めします。例: https://example.com/
。
次の例では、単一ドメインと複数ドメインのシナリオでの RelayStateRule パラメーターの設定例について説明します:
単一ドメインの場合:
set samlAction <samlActionName> -relaystateRule "AAA.LOGIN.RELAYSTATE.EQ(\"https://example1.com/\")"
複数のドメインの場合:
パターンセットを使用して複数のドメインを追加します:
add patset test1
bind patset test1 "https://example1.com/"
bind patset test1 "https://test1.com/"
bind patset test1 "https://10.11.11.112/"
set samlAction <samlActionName> -relaystateRule AAA.LOGIN.RELAYSTATE.CONTAINS_ANY("test1")
<!--NeedCopy-->
FQDN の RegEx パターンマッチングを設定するには:
set samlaction <samlActionName> -relaystateRule "AAA.LOGIN.RELAYSTATE.REGEX_MATCH(re#^https://[a-zA-Z0-9]*.example1.com/#)"
<!--NeedCopy-->
ドメインの先頭に「^」記号 (^https
) を指定し、式の最後にフォワードスラッシュ「/」を指定します (例: example1\.com/
)。
RelayStateRule
エクスプレッションの定義の一部を次に示します:
EQ: Exact match.
CONTAINS: Domain inclusion.
CONTAINS_ANY: Match any domain from a PATSET.
REGEX_MATCH: Regex-based matching.
<!--NeedCopy-->