シトリックス ゲートウェイとマイクロソフト アジュール多要素認証
Citrix Gateway は、ホスト型、SaaS、Web、エンタープライズ、モバイルのあらゆるアプリケーションを、あらゆるデバイスとブラウザのユーザーに提供します。オンプレミスの Microsoft AD に対してユーザーを認証するために nFactor 認証を使用し、Azure Multi-Factor Authentication (MFA) には Microsoft AD FS を活用します。
シトリックス ゲートウェイ
Citrix Gateway は、データセンターとクラウドに展開されたビジネスアプリケーションとデータへの単一のアクセスポイントとシングルサインオン (SSO) をユーザーに提供します。ラップトップ、デスクトップ、シンクライアント、タブレット、スマートフォンなど、さまざまなデバイスで SaaS として提供されます。Citrix Gateway は統合を提供し、リモートアクセスインフラストラクチャのフットプリントを削減し、コストを削減し、管理の容易さとより良いエンドユーザーエクスペリエンスを提供します。Citrix Gateway は、IT をハイブリッドクラウドおよび SaaS 環境に移行するのに役立ちます。
- フェデレーションとシングルサインオン
Citrix Gateway はフェデレーションIDを提供し、Web、VDI、エンタープライズ、SaaS アプリケーションのいずれであっても、すべてのアプリケーションでシングルサインオンを実現するために SAML 2.0、OAuth、OpenID をサポートします。
- オンプレミスのユーザーディレクトリ
シトリックス ゲートウェイは、Office 365 や Salesforce などの SaaS アプリケーションにシングルサインオン (SSO) を提供し、ユーザーディレクトリをオンプレミスに保持します。Microsoft Active Directory フェデレーションサービス (AD FS) の IDプロバイダー またはプロキシとして実装できます。
- 多要素 (nFactor) 認証
Citrix Gateway は nFactor 認証メカニズムを提供し、誰がネットワークにアクセスしているか、何にアクセスされているか、どのように、いつアクセスされているかについてきめ細かな制御を可能にします。RADIUS、TACACS、NTLM、Diameter、SAML 2.0、OAuth 2.0、OpenID 2.0 など、すべての認証メカニズムをサポートしています。
- コンテキストアクセス制御ポリシー
Citrix Gateway は、エンドユーザーデバイスの状態、ユーザー、ユーザーの場所、およびその他のデータに基づいて、ビジネスアプリケーションへのきめ細かなアクセス制御を可能にします。IT 管理者は、アプリケーション環境でデータに安全にアクセスするためのポリシーを作成、管理、適用できます。これらのポリシーは、VDI、Web、モバイル、エンタープライズ、および SaaS アプリケーションに実装できます。
- 可視性と監視
Citrix Application Delivery Management には Gateway Insight が含まれており、Citrix Gateway を介してアクセスされるすべてのアプリケーションのエンドツーエンドのユーザーエクスペリエンスの可視性を提供します。認証失敗、EPA チェック失敗、シングルサインオン失敗に関する問題のトラブルシューティングのために、アプリケーションサポートチームに情報を提供します。


マイクロソフト アジュール 多要素認証
人々は、ますます複雑なシナリオで組織のリソースに接続しています。スマートフォン、タブレット、PC、ラップトップを使用して、企業ネットワークの内外で、組織所有、個人所有、および公共のデバイスから接続し、多くの場合、複数のプラットフォームを使用しています。この常に接続された、マルチデバイス、マルチプラットフォームの世界では、ユーザーアカウントのセキュリティはこれまで以上に重要です。パスワードは、その複雑さに関わらず、デバイス、ネットワーク、プラットフォームをまたいで使用される場合、ユーザーアカウントのセキュリティを確保するにはもはや不十分であり、特にユーザーが複数のアカウントでパスワードを再利用する傾向がある場合はなおさらです。高度なフィッシングやその他のソーシャルエンジニアリング攻撃により、ユーザー名とパスワードがダークウェブ上で公開・販売される結果となる可能性があります。
2段階認証プロセスのセキュリティは、その階層的なアプローチにあります。複数の認証要素を侵害することは、攻撃者にとって大きな課題となります。攻撃者がユーザーのパスワードを知ることができたとしても、追加の認証方法も所有していなければ無意味です。これは、以下の認証方法のうち2つ以上を要求することで機能します。
- あなたが知っているもの (通常はパスワード)
- あなたが持っているもの (電話のように簡単に複製できない信頼できるデバイス)
- あなた自身であるもの (生体認証)
Azure Multi-Factor Authenticationは、データとアプリケーションへのアクセスを保護するのに役立ちます。これは、2つ目の認証形式を使用して追加のセキュリティ層を提供します。組織は条件付きアクセスを使用して、ソリューションを特定のニーズに合わせることができます。
Microsoft Azure 多要素認証の展開方法
Azure MFAを2番目の認証要素として活用するためのさまざまな方法があります。これらの方法は、長所と短所とともに以下に簡単に説明されています。
Azure 多要素認証サーバー
Microsoft Azure Multi-Factor Authenticationサーバーは元々の方法でしたが、廃止される予定です。以下の理由により、新しい実装には考慮すべきではありません。
- 今後、Microsoftからのこの方法へのさらなる投資はありません。
- SSPRおよびAzure MFAクラウドベースとの統合はありません。
- MFAサーバーからMFAクラウドベースソリューションへのシームレスな移行ツールはありません。
Azure MFA ネットワーク ポリシー サーバー拡張機能
Azure MFA 用のネットワーク ポリシー サーバー (NPS) 拡張機能は、NPS アダプターを使用して Azure MFA クラウドベースに接続するサポートされているソリューションです。オンプレミスの RADIUS サーバーとして使用できます。
- NPS アダプター (RADIUS) は、MFA ルール内/外、またはオン/オフのネットワークロケーションを提供します。
- SAML 統合方法と同様に、Azure AD 条件付きアクセス ポリシーとは互換性がありません。条件付きアクセス ポリシーは、はるかに豊富で優れたユーザーエクスペリエンスを提供します。
- NPS アダプターを使用する前に、ユーザーは MFA に登録されている必要があります。Azure MFA クラウドベースや条件付きアクセスとは異なり、ユーザーが登録されていない場合、NPS 拡張機能はユーザーの認証に失敗し、ヘルプデスクへの問い合わせが増加します。
- NPS アダプターが MFA を呼び出すと、ユーザーが登録したデフォルトのオプションが使用されます。MFA が必要であり、まもなく実行されるという視覚的な通知はユーザーにありません。ゲートされたプロセス中にユーザーが MFA メソッドを変更するための UI もありません。ユーザーがデフォルトのデバイスを携帯していない場合、認証は失敗します。ユーザーはセルフサービスポータルに戻ってデフォルトオプションをリセットし、再度接続を試みる必要があります。
マイクロソフト AD FS と アジュール MFA
組織が Azure AD とフェデレーションされているが、パスワードハッシュが Azure AD と同期されていない場合、オンプレミスの AD を Lightweight Directory Access Protocol (LDAP) に使用し、AD FS リレーパーティのアクセス ポリシーの一部として Azure MFA を有効にできます。Windows Server 2016 以降では、プライマリ認証に Azure MFA を構成できるようになりました。
- Azure MFA アダプターは Windows Server 2016 に組み込まれており、追加のインストールは不要です。
- Azure MFA アダプターは Azure AD と直接統合されており、オンプレミスの Azure MFA サーバーは不要です。
- ユーザーが MFA に登録されていない場合、次回のサインイン時にプロセスが案内されます。これにより、ヘルプデスクへの問い合わせが減り、ユーザーにとってより良いプロセスが保証されます。
- ユーザーは、MFA が必要であり、まもなく実行されるという視覚的な通知を受け取ります。ユーザーは、ゲートされたプロセス中に UI でゲートウェイオプションを変更できます。
アジュール AD と アジュール MFA
組織がパスワードハッシュを Azure AD に同期している場合、条件付きアクセス ポリシーを介して Azure MFA を活用し、ユーザーに第2要素認証を要求できます。
- この方法では、オンプレミスに追加のインストールは不要です。
- ユーザーがMFAに登録されていない場合、次回のサインイン時にプロセスが案内されます。これにより、ヘルプデスクへの問い合わせが減り、ユーザーにとってより良いプロセスが保証されます。
- ユーザーはMFAが必要であり、まもなく利用可能になるという視覚的な通知を受け取ります。ユーザーは、UIのゲート付きプロセス中にゲートウェイオプションを変更できます。
アジュール AD パススルー認証と アジュール MFA
Azure ADパススルー認証 (PTA) を使用すると、ユーザーはオンプレミスとクラウドベースの両方のアプリケーションに同じパスワードでサインインできます。ユーザーがAzure ADを使用してサインインすると、この機能はユーザーのパスワードをオンプレミスのActive Directoryに対して直接検証します。Azure AD PTAは、Azure ADパスワードハッシュ同期の代替であり、組織にクラウド認証と同じ利点を提供します。
- Azure AD PTAでは、軽量エージェントをオンプレミスにインストールする必要があります。
- Azure AD PTAは、Azure MFAを含むAzure AD条件付きアクセスポリシーとシームレスに連携することで、ユーザーアカウントを保護します。
- ユーザーはクラウドでセルフサービスパスワード管理タスクを完了できます。
- オンプレミスのパスワードは、いかなる形式でもクラウドに保存されることはありません。
- エージェントは、ネットワーク内からのみアウトバウンド接続を行います。したがって、DMZとしても知られる境界ネットワークにエージェントをインストールする必要はありません。
現在の状況
次の特性を持つ環境では、認証の第2要素としてAzure MFAを活用する必要があります。
- Azure AD同期が構成されたオンプレミスAD。
- Azure ADパスワードハッシュ同期が無効になっています。
- O365アプリケーションへのアクセスが必要です。
- オンプレミス環境に導入されたCitrix Virtual Apps and Desktops™へのアクセスが必要です。
- 現代の認証方法 (SAML、OAuth) を使用したアプリケーションへのアクセスが必要です。
- レガシー認証方法を使用したアプリケーションへのアクセスが必要です。
設計上の考慮事項
提案されたソリューションの設計上の考慮事項は次のとおりです。
- ホスト型、SaaS、エンタープライズ、および Web アプリケーションへのアクセスを単一のポータルで安全に行う必要があります。
- ユーザーは認証プロセス中に資格情報を一度だけ入力すればよいようにする必要があります。
- すべてのホスト型、SaaS、エンタープライズ、および Web アプリケーションに対してシングルサインオンを提供する必要があります。
提案されたソリューション
概要
提案されたソリューションは、以下のコンポーネントに基づいています。
- オンプレミス シトリックス ゲートウェイ
- オンプレミス マイクロソフト アクティブディレクトリ
- オンプレミス マイクロソフト アクティブディレクトリ フェデレーションサービス
- AD FS プロキシとしてのオンプレミス Citrix ADC
- マイクロソフト アジュール 多要素認証
Citrix Gateway は、認証、承認、監査機能 (Citrix ADC AAA) と nFactor 認証メカニズムを活用して、LDAP ポリシーでユーザーを認証し、AD FS リレーパーティのアクセス ポリシーを活用して Azure MFA 検証プロセスをトリガーします。Azure MFA がユーザーを検証した後、AD FS は SAML アサーション (SAML 応答) を生成し、ユーザーを Citrix Gateway にリダイレクトします。その時点で、ユーザーは認証され、Citrix Gateway はユーザーが使用を許可されているすべてのアプリケーションを表示します。
このソリューションには、2つのパブリックDNSレコードと2つのパブリックIPアドレスが必要です。
| 説明内容 | 値 |
|---|---|
| シトリックス ゲートウェイ の FQDN | access.ctxdemos.com |
| Citrix 認証、承認、監査の FQDN | aaa.ctxdemos.com |
このソリューションでは、1つのパブリックSSL証明書を使用します。
| Description | 値 |
|---|---|
| コモンネーム | access.ctxdemos.com |
| サブジェクト代替名 | sts.ctxdemos.com |
| サブジェクト代替名 | aaa.ctxdemos.com |
このソリューションは、社内Microsoft証明機関サービスによって発行されたワイルドカードSSL証明書も使用します。
| 項目説明 | 値 |
|---|---|
| コモンネーム | *.ctxdemos.com |
認証フロー
シーケンス図
次のシーケンス図は、ソリューションの認証フローを示しています。
シーケンス図(/ja-jp/advanced-concepts/media/citrix-unified-gateway-adfs-azuremfa-authentication-sequence-diagram.png)
認証の手順
認証手順は次のとおりです。
- ユーザーはhttps://access.ctxdemos.comに移動します。
- Citrix Gatewayは、ユーザーを最初のCitrix ADC AAA VIP (非アドレス指定可能) にリダイレクトします。
- 最初のCitrix ADC AAA VIPは、シングルサインオンで構成されたスキーマなしのログオンを使用します。その後、高度な認証ポリシーの処理を開始します。
- 最初の認証ポリシーは、認証Cookieを生成するための、アドレス指定不可能なLB VIPへのSAML SPです。
- ヘルパーLB VIPは、認証に2番目のCitrix ADC AAA VIP(アドレス指定可能)を使用するように構成されています。そのため、ユーザーを2番目の認証、承認、および監査VIPにリダイレクトします。
- 2番目のCitrix ADC AAA VIPは、
Username Onlyログオンスキーマを使用し、ユーザーにユーザー名を要求します。その後、高度な認証ポリシーの処理を開始します。 - 最初の認証ポリシーはグループ抽出であり、オンプレミスADでユーザー名を照会し、ユーザーがAzureMFACAUsersセキュリティグループに属しているかどうかを検証します。検証の結果が成功すると、次の認証要素であるLDAPポリシーの処理を開始します。
- LDAPポリシーは、
UsernameAndPasswordログインスキーマと事前入力されたユーザー名フィールドを使用し、ユーザーにADパスワードを要求します。 - 2番目のCitrix ADC AAA VIPでの認証が正常に完了すると、ヘルパーLB VIPに戻り、最初の認証、承認、および監査VIPのSAML応答を生成します。
- 最初のCitrix ADC AAA VIPは、次の要素の処理を開始します。これは、ユーザーのグループがADから抽出され、プロセスで後で使用するために認証、承認、および監査変数に保存されることを保証するグループ抽出です。
- 最初のCitrix ADC AAA VIPは、次の要素の処理を開始します。これは、Citrix ADC上のAD FSプロキシVIPへのSAML SPです。
注:
Citrix ADCはAD FSファームとフェデレーションされています。詳細な手順は後のセクションで説明します。
- AD FSプロキシVIPは、認証Cookie(NSC_TMAAおよびNSC_TMAS)が設定されていることを検証します。その後、バックエンドAD FSサーバーにSAMLリクエストを送信します(バックエンドAD FSサーバーは、サービスの高可用性と回復性のために内部Citrix ADCでロードバランスされている必要があります)。
- AD FSサーバーはSAMLリクエストを処理します。リレーイングパーティのアクセスポリシーが「すべてのユーザーを許可し、認証にMFAを要求する」に設定されているため、Azure MFA認証プロセスがトリガーされます。
- Azure MFAはユーザー名を処理します。すでに登録されている場合は、構成された方法でユーザーにチャレンジします。登録されていない場合は、ユーザーに登録と、プライマリおよびセカンダリ認証方法の設定を促します。
- Azure MFA認証プロセスが正常に完了すると、AD FSはCitrix Gateway(最初のCitrix ADC AAA VIP)向けにSAML応答を生成します。
- 最初のCitrix ADC AAA VIPがSAML応答を受信し、ユーザーの認証プロセスが完了したことを確認します。
- Citrix Gatewayは認証情報をCitrix StoreFront™に送信し、Citrix StoreFront™はユーザーが使用を許可されているすべてのアプリケーションとデスクトップを列挙します。また、ユーザーのグループメンバーシップを処理して、Citrix Gatewayに公開されているブックマークを表示します。
認証画面について
上記のほとんどのステップは、Citrix ADC上のさまざまなVIP間で内部的に発生するため、ユーザーにはシームレスです。ユーザーエクスペリエンスを以下に示します。

実装について
マイクロソフト AD FS
証明書の要件
フェデレーションサーバーには、次の表の証明書が必要です。
| 証明書の種類 | 説明文 | 展開前に知っておくべきこと |
|---|---|---|
| セキュアソケットレイヤー (SSL) 証明書 | これは、フェデレーションサーバーとクライアント間の通信を保護するために使用される標準のSecure Sockets Layer (SSL) 証明書です。 | この証明書は、フェデレーションサーバーまたはフェデレーションサーバープロキシのInternet Information Services (IIS) のデフォルトWebサイトにバインドする必要があります。フェデレーションサーバープロキシの場合、バインドは、フェデレーションサーバープロキシ構成ウィザードを正常に実行する前にIISで構成する必要があります。推奨事項: この証明書はAD FSのクライアントによって信頼される必要があるため、公開 (サードパーティ) 認証局 (CA) によって発行されたサーバー認証証明書を使用してください。例: Verisign。ヒント: この証明書のサブジェクト名は、展開するAD FSの各インスタンスのフェデレーションサービス名を表すために使用されます。このため、新しいCA発行証明書で、パートナーに対して会社または組織の名前を最もよく表すサブジェクト名を選択することを検討することをお勧めします。 |
| サービス通信証明書 | この証明書は、フェデレーションサーバー間の通信を保護するためにWCFメッセージセキュリティを有効にします。 | デフォルトでは、SSL証明書がサービス通信証明書として使用されます。これはAD FS管理コンソールを使用して変更できます。 |
| トークン署名証明書 | これは、フェデレーションサーバーが発行するすべてのトークンを安全に署名するために使用される標準のX509証明書です。 | トークン署名証明書には秘密鍵が含まれている必要があり、フェデレーションサービス内の信頼されたルートにチェーンしている必要があります。デフォルトでは、AD FSは自己署名証明書を作成します。ただし、組織のニーズに応じて、後でAD FS管理スナップインを使用してCA発行の証明書に変更できます。 |
| トークン復号化証明書 | これは、パートナーフェデレーションサーバーによって暗号化された受信トークンを復号化するために使用される標準のSSL証明書です。また、フェデレーションメタデータにも公開されます。 | デフォルトでは、AD FSは自己署名証明書を作成します。ただし、組織のニーズに応じて、後でAD FS管理スナップインを使用してCA発行の証明書に変更できます。 |
デモ環境の構成設定
| 証明書の種類 | デモ環境の構成設定 |
|---|---|
| セキュア ソケッツ レイヤー (SSL) 証明書 | AD FSサーバー上の内部発行CAによって発行された内部証明書。Citrix ADC上の公開信頼証明書。 |
| サービス通信証明書 | AHS内部発行認証局によって発行された内部証明書。 |
| トークン署名証明書 | AD FSサービスによって自動生成されます。 |
| トークン復号化証明書 | AD FSサービスによって自動生成されます。 |
デモ環境では、ワイルドカード証明書が登録され、サーバーにインストールされています。

サービスアカウントの要件
サービスアカウントを作成するか、グループ管理サービスアカウント (gMSA) を利用できます。gMSAを使用するには、キー配布サービスルートキーを作成する必要があります。PowerShellを起動し、次のコマンドを実行してください。
Add-KdsRootKey -EffectiveTime ((get-date).addhours(-10))
<!--NeedCopy-->
このコマンドは、Active Directoryに保存されるキー配布サービスルートキーを作成し、後で作成するAD FSサービスアカウントとしてグループ管理サービスアカウント (gMSA) を作成できるようにします。このコマンドはドメイン管理者権限で実行してください。

DNSレコードの要件
AD FSフェデレーションサービス名には、内部および外部のDNS Aレコードが必要です。デモ環境では、内部DNSレコードはAD FSサーバーのIPを指し、外部DNSレコードはCitrix GatewayのパブリックIPを指しています。
| レコード名 | スコープ | タイプ | IPアドレス |
|---|---|---|---|
| sts.ctxdemox.com | 内部 | A | 22.22.22.6 |
| sts.ctxdemox.com | 外部 | A | 40.85.225.175 |
AD FSロールを追加し、AD FSファームを構成する
AD FSロールを追加する
Windows Server 2016にAD FSロールを追加するには、PowerShellを起動して次のコマンドを実行します。
Install-WindowsFeature AD FS-Federation -IncludeManagementTools
<!--NeedCopy-->

AD FSファームを構成する
これで、サーバーマネージャーからAD FSの展開後構成を開始できます。「このサーバーでフェデレーションサービスを構成する」をクリックします。

「ようこそ」ページで、「フェデレーションサーバーファームに最初のフェデレーションサーバーを作成する」を選択し、「次へ」をクリックします。

「Active Directory Domain Servicesへの接続」ページで、ドメイン管理者アカウントが指定されていることを確認し、「次へ」をクリックします。

「サービスプロパティの指定」ページで、次の手順を完了し、「次へ」をクリックします。
- 前の手順でサーバーにインストールされた証明書を選択します。
- フェデレーションサービス名は、証明書のサブジェクト名に基づいて自動的に入力されます。
- フェデレーションサービスの表示名を入力します。例: CTXDEMOS STS。

「サービスアカウントの指定」ページで、「グループ管理サービスアカウントの作成」を選択し、このアカウントの一意の名前を入力します。グループ管理サービスアカウントはWindows Server 2012以降でサポートされており、30日ごとに自動的に変更される厳格で複雑なパスワードが付属しています。「次へ」をクリックします。

「構成データベースの指定」ページで、SQL Serverデータベースの場所を指定します。「次へ」をクリックします。

「Review Options」ページで、構成の選択内容を確認し、「Next」をクリックします。

「Pre-requisite Checks」ページで、すべての前提条件チェックが正常に完了していることを確認し、「Configure」をクリックします。

「Results」ページで、インストールが正常に完了したことを確認します。「Close」をクリックしてウィザードを終了します。

注:
次の手順を完了するには、Azure テナント ID が必要です。
Azure テナント ID は、Microsoft ドキュメントの記事「Get AzureID Tenant Detail」の手順に従って取得できます。
Microsoft のドキュメントには、Configure AD FS 2016 and Azure MFA にて、Azure MFA クライアント GUID に関する情報も掲載されています。
AD FS ファームの構成 - 自動
次の PowerShell スクリプトを実行できます。
#
# Windows PowerShell script for AD FS Deployment
#
Import-Module ADFS
Install-AdfsFarm `
-CertificateThumbprint:"BD02F30D90A96EEE4A5934F2EA979E7A052584AE" `
-FederationServiceDisplayName:"CTXDEMOS STS" `
-FederationServiceName:"adfs.ctxdemos.com" `
-GroupServiceAccountIdentifier:"C
<!--NeedCopy-->
Azure MFA を使用した AD FS の構成
AD FS サーバーの構成
各 AD FS サーバーで PowerShell を起動し、次のコマンドを実行します。
# Install Windows PowerShell MSOnline Module
Install-Module MSOnline
# Import Windows PowerShell MSOnline Module
Import-Module MSOnline
# Get the Azure Global Administrator credential
$credential = Get-Credential
# Sign in to your Azure Active Directory environment
Connect-MsolService -Credential $credential
# Set a variable for the Azure Tenant name
$azureTenantID = "ctxdemos.onmicrosoft.com"
# Set a variable for the Azure MFA Client GUID
$azureMFAClientGUID = "981f26a1-7f43-403b-a875-f8b09b8cd720"
# Generate a certificate for the Azure MFA on AD FS server
$azureMFACertificate = New-AdfsAzureMfaTenantCertificate -TenantId $azureTenantID
# Add the new credentials to the Azure MFA Client Service Principal
New-MsolServicePrincipalCredential -AppPrincipalId $azureMFAClientGUID -Type asymmetric -Usage verify -
Value $azureMFACertificate
<!--NeedCopy-->
AD FSファームを構成する
AD FSサーバーのいずれか1台でのみ、次のコマンドを実行します。
Set-AdfsAzureMfaTenant -TenantId $azureTenantID -ClientId $azureMFAClientGUID
<!--NeedCopy-->
各サーバーでAD FSサービスを再起動します。その後、Azure MFAがイントラネットおよびエクストラネットで使用するプライマリおよび多要素認証方法として利用可能になっていることがわかります。
プライマリ認証方法(/ja-jp/advanced-concepts/media/adfs-configuration-with-azuremfa-primary-authentication-method.png)
多要素認証方法(/ja-jp/advanced-concepts/media/adfs-configuration-with-azuremfa-multi-factor-authentication-method.png)
Citrix ADC を使用して AD FS を構成します
AD FSとCitrix ADCの間にフェデレーション信頼を作成する必要があります。AD FS管理コンソールで、Relying Party Trustに移動し、Add Relying Party Trustを選択します。
証明書利用者信頼の追加(/ja-jp/advanced-concepts/media/adfs-add-relying-party-trust-start.png)
手動で証明書利用者情報を入力を選択し、次へをクリックします。
証明書利用者に関するデータを入力(/ja-jp/advanced-concepts/media/adfs-add-relying-party-trust-enter-data-about-the-relying-party-manually.png)
説明的な表示名とオプションのメモを入力します。Nextをクリックします。
オプションのメモ(/ja-jp/advanced-concepts/media/adfs-add-relying-party-trust-display-name-and-optional-notes.png)
Nextをクリックします。
証明書を構成する(/ja-jp/advanced-concepts/media/adfs-add-relying-party-trust-configure-certificate.png)
「SAML 2.0 WebSSOプロトコルのサポートを有効にする」を選択し、https://CitrixGatewayFQDN/cgi/samlauthを入力します。デモ環境では、https://access.ctxdemos.com/cgi/samlauthです。「Next」をクリックします。
URLを構成する(/ja-jp/advanced-concepts/media/adfs-add-relying-party-trust-configure-url.png)
信頼パーティトラストの一意の識別子文字列を入力します。デモ環境では、https://access.ctxdemos.comです。この識別子は、Citrix ADC SAMLプロファイルで発行者URLとして使用されます。「次へ」をクリックします。
識別子を構成する(/ja-jp/advanced-concepts/media/adfs-add-relying-party-trust-configure-identifiers.png)
「アクセス制御ポリシーの選択」ページで、「全員を許可し、MFAを要求する」を選択します。「次へ」をクリックします。
アクセス制御ポリシー(/ja-jp/advanced-concepts/media/adfs-add-relying-party-trust-choose-access-control-policy.png)
「次へ」をクリックします。
信頼を追加(/ja-jp/advanced-concepts/media/adfs-add-relying-party-trust-ready-to-add-trust.png)
「完了」ページで、「このアプリケーションのクレーム発行ポリシーを構成する」を選択します。「閉じる」をクリックします。
完了(/ja-jp/advanced-concepts/media/adfs-add-relying-party-trust-finish.png)
「発行変換ルール」ページで、「ルールの追加」をクリックします。
ルールを追加(/ja-jp/advanced-concepts/media/adfs-issuance-transform-rules-start.png)
「次へ」をクリックします。
テンプレートを選択(/ja-jp/advanced-concepts/media/adfs-issuance-transform-rules-select-rule-template.png)
「クレームルール名」フィールドに説明的な名前を入力します。「属性ストア」で、「Active Directory」を選択します。次に、「LDAP属性」と「送信クレームの種類」を選択します。
ルールを構成する(/ja-jp/advanced-concepts/media/adfs-issuance-transform-rules-configure-rule.png)
新しいルールを作成し、カスタムルールを使用してクレームを送信をクレームルールテンプレートとして使用します。クレームルール名にわかりやすい名前を入力し、カスタムルールに次の文字列を入力します。
=> issue(Type = "logoutURL", Value = "https://access.ctxdemos.com/cgi/tmlogout", Properties["http://schemas.xmlsoap.org/ws/2005/05/identity/claimproperties/attributename"] = "urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified");
<!--NeedCopy-->
ルールを構成する(/ja-jp/advanced-concepts/media/adfs-issuance-transform-rules-logoff-configure-rule.png)
クレーム発行ポリシーが作成されたら、OKをクリックします。
証明書利用者信頼 > Citrix ADCを右クリックし、プロパティを選択します。エンドポイントを選択し、ログアウト用のSAMLを追加をクリックしてエンドポイントを追加します。エンドポイントタイプリストからSAMLログアウトを選択します。バインディングにはPOSTを選択し、信頼済みURLにはhttps://sts.ctxdemos.com/adfs/ls/?wa=wsignout1.0を入力します。これはCitrix ADCからログアウトする際のログアウトURLとして機能します。OKをクリックします。
SAMLログアウト(/ja-jp/advanced-concepts/media/adfs-add-relying-party-trust-endpoint-saml-logout.png)
証明書利用者信頼 > Citrix ADCを右クリックし、プロパティを選択します。暗号化を選択し、Citrix Gatewayにインストールされている公開SSL証明書を追加します。この証明書は、Citrix ADCからの受信SMLリクエストを復号化するために使用されます。署名タブでも同様の操作を繰り返します。この証明書は、受信SAMLリクエストの署名をチェックするために使用されます。OKをクリックします。
IdP開始サインオンページを有効にする
AD FS IdP開始サインオンページを有効にできます。IdP開始サインオンを使用して、未登録のMFAユーザーにカスタムエラーページを表示します。有効にするには、次のコマンドを実行します。
Set-AdfsProperties -EnableIdPInitiatedSignonPage $true
<!--NeedCopy-->
AD FSファームをテストする
Webブラウザを開き、以下に移動します。
- https://sts.ctxdemos.com/FederationMetadata/2007-06/FederationMetadata.xml
- https://sts.ctxdemos.com/adfs/fs/federationserverservice.asmx
- https://sts.ctxdemos.com/adfs/ls/idpinitatedsignon.aspx
シトリックス ADC と シトリックス ゲートウェイ
シトリックス ゲートウェイを構成する
ウィザードを使用してCitrix Gatewayを構成できます。Citrix ADC管理GUIにログオンし、Unified Gatewayに移動して、Create New Gatewayをクリックします。次に、Continueをクリックします。

ユニファイド ゲートウェイの名前、IP、およびFQDNを入力し、続行をクリックします。
シトリックス ゲートウェイの構成(/ja-jp/advanced-concepts/media/adfs-gateway-configuration.png)
パブリックSSL証明書を選択し、Continueをクリックします。

基本的なLDAPポリシーを作成し、Unified Gatewayにバインドします。Continueをクリックします。

RfWebUIに基づいたポータルテーマを作成し、Unified Gatewayにバインドします。Continueをクリックします。

Citrix GatewayをStoreFrontと統合するには、アプリケーションの前のプラス記号(+)を選択します。
ゲートウェイとストアフロントの統合(/ja-jp/advanced-concepts/media/adfs-applications.png)
シトリックス ストアフロントをシトリックス ゲートウェイに統合する
アプリケーションページで、XenApp & XenDesktop®を選択し、統合ポイントの選択リストからStoreFrontを選択します。続行をクリックします。

StoreFront URLを入力し、ストアの取得をクリックします。次に、既定のActive DirectoryドメインとセキュアチケットオーソリティURLの設定を入力します。STA接続のテストをクリックし、その後続行をクリックします。

「Done」をクリックし、その後「Continue」をクリックします。

Citrix Gateway の構成と StoreFront との統合 – コマンドラインインターフェース
# Create Session Policy and Action for Citrix Receiver
add vpn sessionAction AC_OS_22.22.44.50 -transparentInterception OFF -defaultAuthorizationAction ALLOW -SSO ON -icaProxy ON -wihome "https://access.ctxdemos.com/Citrix/ExternalWeb" -ClientChoices OFF -ntDomain CTXDEMOS -clientlessVpnMode OFF -storefronturl "https://access.ctxdemos.com"
add vpn sessionPolicy PL_OS_22.22.44.50 "HTTP.REQ.HEADER(\"User-Agent\").CONTAINS(\"CitrixReceiver\") && HTTP.REQ.HEADER(\"User-Agent\").CONTAINS(\"CitrixVPN\").NOT && HTTP.REQ.HEADER(\"User-Agent\").CONTAINS(\"NSGiOSplugin\").NOT" AC_OS_22.22.44.50
# Create Session Policy and Action for Citrix Web Client
add vpn sessionAction AC_WB_22.22.44.50 -transparentInterception ON -defaultAuthorizationAction ALLOW -forceCleanup cookie -SSO ON -ssoCredential PRIMARY -icaProxy OFF -wihome "https://storefront.ctxdemos.com/Citrix/ExternalWeb" -wiPortalMode COMPACT -ClientChoices OFF -ntDomain CTXDEMOS -clientlessVpnMode ON -clientlessPersistentCookie ALLOW
add vpn sessionPolicy PL_WB_22.22.44.50 "HTTP.REQ.HEADER(\"User-Agent\").CONTAINS(\"CitrixReceiver\").NOT" AC_WB_22.22.44.50
# Create Session Policy and Action for Citrix Gateway Client
add vpn sessionAction UG_VPN_SAct_22.22.44.50 -transparentInterception ON -defaultAuthorizationAction ALLOW -SSO ON -ClientChoices ON -clientlessVpnMode ON
add vpn sessionPolicy UG_VPN_SPol_22.22.44.50 true UG_VPN_SAct_22.22.44.50
# Create Responder Policy and Action for Gateway Logout
add responder action RESACT_GATEWAY_LOGOFF_REDIRECT redirect "\"https://\" + HTTP.REQ.HOSTNAME.HTTP_URL_SAFE" -responseStatusCode 302
add responder policy RESPOL_GATEWAY_LOGOFF_REDIRECT "HTTP.REQ.URL.CONTAINS(\"/cgi/logout\")" RESACT_GATEWAY_LOGOFF_REDIRECT
# Create Citrix Gateway vServer
add vpn vserver UGVS_VPN_UGCTXDEMOS SSL 0.0.0.0 -loginOnce ON -Listenpolicy NONE -vserverFqdn access.ctxdemos.com
set ssl vserver UGVS_VPN_UGCTXDEMOS -ssl3 DISABLED -tls1 DISABLED -tls11 DISABLED -tls13 ENABLED -ocspStapling ENABLED -HSTS ENABLED -maxage 157680000 -IncludeSubdomains YES
bind ssl vserver UGVS_VPN_UGCTXDEMOS -certkeyName CTXDEMOS_PUBLIC_CERT
bind ssl vserver UGVS_VPN_UGCTXDEMOS -cipherName CTXDEMOS_FRONTEND_APLUS
bind vpn vserver UGVS_VPN_UGCTXDEMOS -portaltheme CTXDEMOS_PORTAL
bind vpn vserver UGVS_VPN_UGCTXDEMOS -staServer "https://wsctxdc01.ctxdemos.com"
bind vpn vserver UGVS_VPN_UGCTXDEMOS -policy RESPOL_GATEWAY_LOGOFF_REDIRECT -priority 100 -gotoPriorityExpression END -type REQUEST
bind vpn vserver UGVS_VPN_UGCTXDEMOS -policy PL_OS_22.22.44.50 -priority 100 -gotoPriorityExpression NEXT -type REQUEST
bind vpn vserver UGVS_VPN_UGCTXDEMOS -policy PL_WB_22.22.44.50 -priority 110 -gotoPriorityExpression NEXT -type REQUEST
bind vpn vserver UGVS_VPN_UGCTXDEMOS -policy UG_VPN_SPol_22.22.44.50 -priority 58000 -gotoPriorityExpression NEXT -type REQUEST
# Create Content Switching Policy and Action for Citrix Gateway
add cs action CSACT_UGCTXDEMOS -targetVserver UGVS_VPN_UGCTXDEMOS
add cs policy CSPOL_UGCTXDEMOS -rule "is_vpn_url || HTTP.REQ.URL.PATH.SET_TEXT_MODE(IGNORECASE).STARTSWITH(\"/Citrix/External\")" -action CSACT_UGCTXDEMOS
# Create Content Switching vServer for Citrix Gateway
add cs vserver CSVS_UGCTXDEMOS SSL 22.22.44.50 443 -cltTimeout 180
set ssl vserver CSVS_UGCTXDEMOS -ssl3 DISABLED -tls1 DISABLED -tls11 DISABLED -tls13 ENABLED -ocspStapling ENABLED -HSTS ENABLED -maxage 157680000 -IncludeSubdomains YES
bind ssl vserver CSVS_UGCTXDEMOS -certkeyName CTXDEMOS_PUBLIC_CERT
bind ssl vserver CSVS_UGCTXDEMOS -cipherName CTXDEMOS_FRONTEND_APLUS
bind cs vserver CSVS_UGCTXDEMOS -policyName CSPOL_UGCTXDEMOS -priority 63000
# Create Responder Policy and Action for HTTP to HTTPS Redirection
add responder action RESACT_HTTP_TO_HTTPS redirect "\"https://\" + HTTP.REQ.HOSTNAME.HTTP_URL_SAFE + HTTP.REQ.URL.PATH_AND_QUERY.HTTP_URL_SAFE" -responseStatusCode 301
add responder policy RESPOL_HTTP_TO_HTTPS HTTP.REQ.IS_VALID RESACT_HTTP_TO_HTTPS
# Create Always On Server and Service
add server LBSRV_ALWAYS_UP 127.0.0.1
add service LBSVC_ALWAYS_UP LBSRV_ALWAYS_UP HTTP 80 -gslb NONE -maxClient 0 -maxReq 0 -cip ENABLED cip-header -usip YES -useproxyport YES -sp OFF -cltTimeout 180 -svrTimeout 360 -CKA NO -TCPB NO -CMP NO
# Create Always On vServer for Citrix Gateway
add lb vserver CSVS_UGCTXDEMOS_REDIRECT_HTTP_TO_HTTPS HTTP 22.22.44.50 80 -persistenceType NONE -cltTimeout 180
bind lb vserver CSVS_UGCTXDEMOS_REDIRECT_HTTP_TO_HTTPS LBSVC_ALWAYS_UP
bind lb vserver CSVS_UGCTXDEMOS_REDIRECT_HTTP_TO_HTTPS -policyName RESPOL_HTTP_TO_HTTPS -priority 100 -gotoPriorityExpression END -type REQUEST
<!--NeedCopy-->
最初の認証サーバーを構成する
# Create Initialization SAML SP Policy and Action and Bind it to Citrix ADC AAA Authentication vServer
add authentication samlAction AUTH_ACT_SAML_SP_VPN_TO_LB -samlIdPCertName CTXDEMOS_PUBLIC_CERT -samlSigningCertName CTXDEMOS_PUBLIC_CERT -samlRedirectUrl "https://access.ctxdemos.com/samltolb" -signatureAlg RSA-SHA256 -digestMethod SHA256 -samlBinding REDIRECT -groupNameField Groups
add authentication Policy AUTH_POL_SAMP_SP_VPN_TO_LB -rule TRUE -action AUTH_ACT_SAML_SP_VPN_TO_LB
# Create Authentication Policy and Action for SAML SP to ADFS
add authentication samlAction AUTH_ACT_SAML_SP_ADFS -samlIdPCertName CTXDEMOS_ADFS_TOKEN_SIGNING -samlSigningCertName CTXDEMOS_PUBLIC_CERT -samlRedirectUrl "https://sts.ctxdemos.com/adfs/ls/" -samlUserField "Name ID" -samlRejectUnsignedAssertion OFF -samlIssuerName "https://access.ctxdemos.com" -Attribute1 "E-Mail Address" -signatureAlg RSA-SHA256 -digestMethod SHA256 -logoutURL "https://sts.ctxdemos.com/adfs/ls/wa=wsignout1.0" -forceAuthn ON
add authentication Policy AUTH_POL_SAML_SP_ADFS -rule TRUE -action AUTH_ACT_SAML_SP_ADFS
# Create Authentication Policy Label for for SAML SP to ADFS
add authentication policylabel AUTH_POLLBL_ADFS_AZUREMFA -loginSchema LSCHEMA_INT
bind authentication policylabel AUTH_POLLBL_ADFS_AZUREMFA -policyName AUTH_POL_SAML_SP_ADFS -priority 100 -gotoPriorityExpression NEXT
# Create Authentication Policy and Action for Group Extraction
add authentication ldapAction AUTH_ACT_LDAP_GROUP_EXTRACTION_AZUREMFACA -serverIP 22.22.22.61 -serverPort 636 -ldapBase "DC=ctxdemos,DC=com" -ldapBindDn "CN=svc_ctxadc01,OU=Services,OU=Accounts,DC=ctxdemos,DC=com" -ldapBindDnPassword 0c4fe86d56a865ef514a15affd1429f3e079ce1089731d4a407772d21036f3c8 -encrypted -encryptmethod ENCMTHD_3 -ldapLoginName sAMAccountName -searchFilter "memberOf:1.2.840.113556.1.4.1941:=CN=AzureMFACAUsers,OU=Groups,OU=Authorizations,DC=ctxdemos,DC=com" -groupAttrName memberOf -subAttributeName cn -secType SSL -authentication DISABLED -nestedGroupExtraction ON -maxNestingLevel 5 -groupNameIdentifier sAMAccountName -groupSearchAttribute memberOf -groupSearchSubAttribute CN -Attribute1 mail -Attribute2 objectGUID
add authentication Policy AUTH_POL_LDAP_GROUP_EXTRACTION_AZURAMFACA -rule TRUE -action AUTH_ACT_LDAP_GROUP_EXTRACTION_AZUREMFACA
# Create Authentication Policy Label for Group Extraction
add authentication policylabel AUTH_POLLBL_LDAP_GROUP_EXTRACTION_AZURAMFACA -loginSchema LSCHEMA_INT
bind authentication policylabel AUTH_POLLBL_LDAP_GROUP_EXTRACTION_AZURAMFACA -policyName AUTH_POL_LDAP_GROUP_EXTRACTION_AZURAMFACA -priority 100 -gotoPriorityExpression NEXT -nextFactor AUTH_POLLBL_ADFS_AZUREMFA
# Create Login Schema Policy and Profile for First Citrix ADC AAA Authentication vServer
add authentication loginSchema LSCHEMA_PRF_NOSCHEMA -authenticationSchema noschema -SSOCredentials YES
add authentication loginSchemaPolicy LSCHEMA_POL_NOSCHEMA -rule TRUE -action LSCHEMA_PRF_NOSCHEMA
# Create First Citrix ADC AAA Authentication vServer
add authentication vserver AAAVS_CTXDEMOS_COM_FOR_VPN SSL 0.0.0.0
set ssl vserver AAAVS_CTXDEMOS_COM_FOR_VPN -ssl3 DISABLED -tls1 DISABLED -tls11 DISABLED -tls13 ENABLED -ocspStapling ENABLED -HSTS ENABLED -maxage 157680000 -IncludeSubdomains YES
bind ssl vserver AAAVS_CTXDEMOS_COM_FOR_VPN -certkeyName CTXDEMOS_PUBLIC_CERT
bind ssl vserver AAAVS_CTXDEMOS_COM_FOR_VPN -cipherName CTXDEMOS_FRONTEND_APLUS
bind authentication vserver AAAVS_CTXDEMOS_COM_FOR_VPN -policy LSCHEMA_POL_NOSCHEMA -priority 100 -gotoPriorityExpression END
bind authentication vserver AAAVS_CTXDEMOS_COM_FOR_VPN -policy AUTH_POL_SAMP_SP_VPN_TO_LB -priority 100 -nextFactor AUTH_POLLBL_LDAP_GROUP_EXTRACTION_AZURAMFACA -gotoPriorityExpression NEXT
# Create First Citrix ADC AAA Authentication Profile
add authentication authnProfile AAA_AUTH_PRF_VPN -authnVsName AAAVS_CTXDEMOS_COM_FOR_VPN -AuthenticationHost aaa.ctxdemos.com
# Set Authentication Profile on Gateway vServer
set vpn vserver UGVS_VPN_UGCTXDEMOS -authnProfile AAA_AUTH_PRF_VPN
<!--NeedCopy-->
2番目の認証サーバーを構成する
# Create Authentication Policy and Action for LDAP
add authentication ldapAction AUTH_ACT_LDAP -serverIP 22.22.22.61 -serverPort 636 -authTimeout 60 -ldapBase "DC=ctxdemos,DC=com" -ldapBindDn "CN=svc_ctxadc01,OU=Services,OU=Accounts,DC=ctxdemos,DC=com" -ldapBindDnPassword 273881819af883e70c33d83c0546eac84e81d6eeba904f2d65bbebf2819c025a -encrypted -encryptmethod ENCMTHD_3 -ldapLoginName sAMAccountName -groupAttrName memberOf -subAttributeName cn -secType SSL -passwdChange ENABLED -nestedGroupExtraction ON -maxNestingLevel 5 -groupNameIdentifier sAMAccountName -groupSearchAttribute memberOf -groupSearchSubAttribute CN -Attribute1 userprincipalname -Attribute2 mail -Attribute3 userParameters
add authentication Policy AUTH_POL_LDAP_USER_NAME_PASSWORD -rule TRUE -action AUTH_ACT_LDAP
# Create Login Schema Policy and Profile for Second Citrix ADC AAA Authentication vServer - Username (Pre-filled ) and Password
add authentication loginSchema LSCHEMA_USER_NAME_PASSWORD -authenticationSchema "/nsconfig/loginschema/CTXDEMOS_USER_NAME_PASS.xml" -SSOCredentials YES
add authentication loginSchemaPolicy LSCHEMA_POL_USER_NAME_PASSWORD -rule TRUE -action LSCHEMA_USER_NAME_PASSWORD
# Create Authentication Policy Label for LDAP Username and Password
add authentication policylabel AUTH_POLLBL_LDAP_USER_NAME_PASSWORD -loginSchema LSCHEMA_USER_NAME_PASSWORD
bind authentication policylabel AUTH_POLLBL_LDAP_USER_NAME_PASSWORD -policyName AUTH_POL_LDAP_USER_NAME_PASSWORD -priority 110 -gotoPriorityExpression NEXT
# Create Login Schema Policy and Profile for Second Citrix ADC AAA Authentication vServer - Username Only
add authentication loginSchema LSCHEMA_USER_NAME_ONLY -authenticationSchema "/nsconfig/loginschema/CTXDEMOS_USER_NAME_ONLY.xml"
add authentication loginSchemaPolicy LSCHEMA_POL_NOPASSWORD -rule TRUE -action LSCHEMA_USER_NAME_ONLY
# Create Citrix ADC AAA Session Policy and Profile
add tm sessionAction AAA_SESSION_PRF_CTXDEMOS -SSO ON -ssoDomain CTXDEMOS -persistentCookie ON -persistentCookieValidity 30
add tm sessionPolicy AAA_SESSION_POL_CTXDEMOS TRUE AAA_SESSION_PRF_CTXDEMOS
# Create Second Citrix ADC AAA Authentication vServer
add authentication vserver AAAVS_CTXDEMOS_COM SSL 22.22.44.51 443
set ssl vserver AAAVS_CTXDEMOS_COM -ssl3 DISABLED -tls1 DISABLED -tls11 DISABLED -tls13 ENABLED -ocspStapling ENABLED -HSTS ENABLED -maxage 157680000 -IncludeSubdomains YES
bind ssl vserver AAAVS_CTXDEMOS_COM -certkeyName CTXDEMOS_PUBLIC_CERT
bind ssl vserver AAAVS_CTXDEMOS_COM -cipherName CTXDEMOS_FRONTEND_APLUS
bind authentication vserver AAAVS_CTXDEMOS_COM -portaltheme CTXDEMOS_PORTAL
bind authentication vserver AAAVS_CTXDEMOS_COM -policy AAA_SESSION_POL_CTXDEMOS -priority 100 -gotoPriorityExpression NEXT
bind authentication vserver AAAVS_CTXDEMOS_COM -policy LSCHEMA_POL_NOPASSWORD -priority 110 -gotoPriorityExpression END
bind authentication vserver AAAVS_CTXDEMOS_COM -policy AUTH_POL_LDAP_GROUP_EXTRACTION_AZURAMFACA -priority 140 -nextFactor AUTH_POLLBL_LDAP_USER_NAME_PASSWORD -gotoPriorityExpression NEXT
# Create Second Citrix ADC AAA Authentication Profile
add authentication authnProfile AAA_AUTH_PRF -authnVsName AAAVS_CTXDEMOS_COM -AuthenticationHost aaa.ctxdemos.com
<!--NeedCopy-->
Citrix ADCをAD FS Webアプリケーションプロキシとして構成する
Citrix ADCをAD FS Webアプリケーションプロキシとして構成するには、Citrix ADC CLIで次のコマンドを実行します。
# Pattern Set - ADFS Proxy Hostname
add policy patset PATSET_ADFS_HOSTNAME
bind policy patset PATSET_ADFS_HOSTNAME sts.ctxdemos.com -index 1 -charset ASCII
# Policy Expression - ADFS Proxy Hostname
add policy expression is_ADFS_HOSTNAME "HTTP.REQ.HEADER(\"Host\").TO_LOWER.CONTAINS_ANY(\"PATSET_ADFS_HOSTNAME\")"
# Pattern Set - ADFS Proxy Path for NoAuth
add policy patset PATSET_ADFS_PATH_NOAUTH
bind policy patset PATSET_ADFS_PATH_NOAUTH "/adfs/services/trust" -index 1 -charset ASCII
bind policy patset PATSET_ADFS_PATH_NOAUTH "/federationmetadata/2007-06/federationmetadata.xml" -index 2 -charset ASCII
bind policy patset PATSET_ADFS_PATH_NOAUTH "/adfs/fs/federationserverservice.asmx" -index 3 -charset ASCII
bind policy patset PATSET_ADFS_PATH_NOAUTH "/adfs/ls/FormsSignIn.aspx" -index 4 -charset ASCII
bind policy patset PATSET_ADFS_PATH_NOAUTH "/adfs/services/trust/2005/usernamemixed" -index 5 -charset ASCII
bind policy patset PATSET_ADFS_PATH_NOAUTH "/adfs/services/trust/mex" -index 6 -charset ASCII
# Policy Expression - ADFS Proxy Path for NoAuth
add policy expression is_ADFS_PROXY_NOAUTH "HTTP.REQ.URL.PATH.TO_LOWER.CONTAINS_ANY(\"PATSET_ADFS_PATH_NOAUTH\")"
# Pattern Set - ADFS Proxy Path for Passive Client
add policy patset PATSET_ADFS_PATH_ACTIVE_PASSIVE
bind policy patset PATSET_ADFS_PATH_ACTIVE_PASSIVE "/adfs" -index 1 -charset ASCII
bind policy patset PATSET_ADFS_PATH_ACTIVE_PASSIVE "/cgi/selfauth" -index 2 -charset ASCII
# Policy Expression - ADFS Proxy Path for Passive Client
add policy expression is_ADFS_PROXY_ACTIVE_PASSIVE "(HTTP.REQ.HEADER(\"Host\").TO_LOWER.CONTAINS_ANY(\"PATSET_ADFS_HOSTNAME\") && HTTP.REQ.URL.PATH.TO_LOWER.STARTSWITH_ANY(\"PATSET_ADFS_PATH_ACTIVE_PASSIVE\"))"
# Rewrite Policies for ADFS PIP
add rewrite action RWACT_X_MS_Proxy insert_http_header X-MS-Proxy "\"NETSCALER\""
add rewrite policy RWPOL_X_MS_Proxy true RWACT_X_MS_Proxy
add rewrite action RWACT_X_MS_Forwarded_Client_IP insert_http_header X-MS-Forwarded-Client-IP CLIENT.IP.SRC
add rewrite policy RWPOL_X_MS_Forwarded_Client_IP true RWACT_X_MS_Forwarded_Client_IP
add rewrite action RWACT_X_MS_Endpoint_Absolute_Path insert_http_header X-MS-Endpoint-Absolute-Path HTTP.REQ.URL
add rewrite policy RWPOL_X_MS_Endpoint_Absolute_Path true RWACT_X_MS_Endpoint_Absolute_Path
add rewrite action RWACT_X_MS_Target_Role insert_http_header X-MS-Target-Role "\"PrimaryComputer\""
add rewrite policy RWPOL_X_MS_Target_Role true RWACT_X_MS_Target_Role
add rewrite action RWACT_X_MS_ADFS_Proxy_Client_IP insert_http_header X-MS-ADFS-Proxy-Client-IP CLIENT.IP.SRC
add rewrite policy RWPOL_X_MS_ADFS_Proxy_Client_IP true RWACT_X_MS_ADFS_Proxy_Client_IP
add rewrite action RWACT_X_MS_Client_User_Agent insert_http_header X-MS-Client-User-Agent "HTTP.REQ.HEADER(\"User-Agent\")"
add rewrite policy RWPOL_X_MS_Client_User_Agent true RWACT_X_MS_Client_User_Agent
add rewrite action RWACT_ADFS_PROXYMEX replace HTTP.REQ.URL.PATH_AND_QUERY "\"/adfs/services/trust/proxymex\" + HTTP.REQ.URL.SET_TEXT_MODE(IGNORECASE).PATH_AND_QUERY.STRIP_START_CHARS(\"/adfs/services/trust/mex\").HTTP_URL_SAFE"
add rewrite policy RWPOL_ADFS_PROXYMEX "is_ADFS_HOSTNAME && HTTP.REQ.URL.TO_LOWER.STARTSWITH(\"/adfs/services/trust/mex\")" RWACT_ADFS_PROXYMEX
add rewrite policy RWPOL_ADFS_PROXY_HEADERS-NOACT TRUE NOREWRITE
add rewrite policylabel RWPOLLBL_ADFS_PROXY_HEADERS http_req
bind rewrite policylabel RWPOLLBL_ADFS_PROXY_HEADERS RWPOL_X_MS_Proxy 100 NEXT
bind rewrite policylabel RWPOLLBL_ADFS_PROXY_HEADERS RWPOL_X_MS_Forwarded_Client_IP 110 NEXT
bind rewrite policylabel RWPOLLBL_ADFS_PROXY_HEADERS RWPOL_X_MS_Endpoint_Absolute_Path 120 NEXT
bind rewrite policylabel RWPOLLBL_ADFS_PROXY_HEADERS RWPOL_X_MS_Target_Role 130 NEXT
bind rewrite policylabel RWPOLLBL_ADFS_PROXY_HEADERS RWPOL_X_MS_ADFS_Proxy_Client_IP 140 NEXT
bind rewrite policylabel RWPOLLBL_ADFS_PROXY_HEADERS RWPOL_X_MS_Client_User_Agent 150 NEXT
bind rewrite policylabel RWPOLLBL_ADFS_PROXY_HEADERS RWPOL_ADFS_PROXYMEX 160 NEXT
# Create ADFS Server and Service Group
add server LBSRV_ADFS wsadfs01.ctxdemos.com
add serviceGroup LBSVCGRP_ADFS_443 SSL -maxClient 0 -maxReq 0 -cip ENABLED X-MS-Forwarded-Client-IP -usip NO -useproxyport YES -sp ON -cltTimeout 180 -svrTimeout 360 -CKA NO -TCPB NO -CMP YES
bind ssl serviceGroup LBSVCGRP_ADFS_443 -cipherName CTXDEMO_BACKEND
set ssl serviceGroup LBSVCGRP_ADFS_443 -ssl3 DISABLED -tls1 DISABLED -tls11 DISABLED
bind serviceGroup LBSVCGRP_ADFS_443 LBSRV_ADFS 443
# Create ADFS Proxy NoAuth Load Balancing vServer
add lb vserver LBVS_ADFS_PROXY_NOAUTH SSL 0.0.0.0 0 -persistenceType NONE -cltTimeout 180
set ssl vserver LBVS_ADFS_PROXY_NOAUTH -ssl3 DISABLED -tls1 DISABLED -tls11 DISABLED -tls13 ENABLED -ocspStapling ENABLED -HSTS ENABLED -maxage 157680000 -IncludeSubdomains YES
bind ssl vserver LBVS_ADFS_PROXY_NOAUTH -certkeyName CTXDEMOS-PUBLIC
bind ssl vserver LBVS_ADFS_PROXY_NOAUTH -cipherName CTXDEMO_BACKEND
bind lb vserver LBVS_ADFS_PROXY_NOAUTH LBSVCGRP_ADFS_443
bind lb vserver LBVS_ADFS_PROXY_NOAUTH -policyName RWPOL_ADFS_PROXY_HEADERS-NOACT -priority 100 -gotoPriorityExpression NEXT -type REQUEST -invoke policylabel RWPOLLBL_ADFS_PROXY_HEADERS
# Create ADFS Proxy NoAuth Content Switching Policy and Action
add cs action CSACT_ADFS_PROXY_NOAUTH -targetLBVserver LBVS_ADFS_PROXY_NOAUTH
add cs policy CSPOL_ADFS_PROXY_NOAUTH -rule is_ADFS_PROXY_NOAUTH -action CSACT_ADFS_PROXY_NOAUTH
# Create ADFS Proxy Active-Passive Load Balancing vServer
add lb vserver LBVS_ADFS_PROXY_ACTIVE_PASSIVE SSL 0.0.0.0 0 -persistenceType NONE -cltTimeout 180 -Authentication ON -authnProfile AAA_AUTH_PRF
set ssl vserver LBVS_ADFS_PROXY_ACTIVE_PASSIVE -ssl3 DISABLED -tls1 DISABLED -tls11 DISABLED -tls13 ENABLED -ocspStapling ENABLED -HSTS ENABLED -maxage 157680000 -IncludeSubdomains YES
bind lb vserver LBVS_ADFS_PROXY_ACTIVE_PASSIVE LBSVCGRP_ADFS_443
bind ssl vserver LBVS_ADFS_PROXY_ACTIVE_PASSIVE -certkeyName CTXDEMOS-PUBLIC
bind ssl vserver LBVS_ADFS_PROXY_ACTIVE_PASSIVE -cipherName CTXDEMO_FRONTEND_APLUS
bind lb vserver LBVS_ADFS_PROXY_ACTIVE_PASSIVE -policyName RWPOL_ADFS_PROXY_HEADERS-NOACT -priority 100 -gotoPriorityExpression NEXT -type REQUEST -invoke policylabel RWPOLLBL_ADFS_PROXY_HEADERS
# Create ADFS Proxy Active-Passive Content Switching Policy and Action
add cs action CSACT_ADFS_PROXY_ACTIVE_PASSIVE -targetLBVserver LBVS_ADFS_PROXY_ACTIVE_PASSIVE
add cs policy CSPOL_ADFS_PROXY_ACTIVE_PASSIVE -rule is_ADFS_PROXY_ACTIVE_PASSIVE -action CSACT_ADFS_PROXY_ACTIVE_PASSIVE
# Bind Content Switching Policies to Citrix Gateway Content Switching vServer
bind cs vserver CSVS_UGCTXDEMOS -policyName CSPOL_ADFS_PROXY_NOAUTH -priority 100
bind cs vserver CSVS_UGCTXDEMOS -policyName CSPOL_ADFS_PROXY_ACTIVE_PASSIVE -priority 300
# Create Citrix ADC AAA Traffic Policies and Bind them to ADFS Proxy Active-Passive Load Balancing vServer
add tm formSSOAction AAATM_SSOPRF_ADFS_LOGIN -actionURL "/adfs/ls" -userField UserName -passwdField Password -ssoSuccessRule true -nameValuePair AuthMethod=FormsAuthentication -responsesize 15000 -submitMethod POST
add tm trafficAction AAATM_PRF_ADFS_LOGIN -appTimeout 1 -SSO ON -formSSOAction AAATM_SSOPRF_ADFS_LOGIN -persistentCookie OFF -InitiateLogout OFF -kcdAccount NONE -userExpression "HTTP.REQ.USER.ATTRIBUTE(3)" -passwdExpression "HTTP.REQ.USER.ATTRIBUTE(2)"
add tm trafficPolicy AAATM_POL_ADFS_LOGIN "HTTP.REQ.URL.TO_LOWER.STARTSWITH(\"/adfs/ls\")" AAATM_PRF_ADFS_LOGIN
add tm trafficAction AAATM_PRF_ADFS_LOGOUT -appTimeout 1 -persistentCookie OFF -InitiateLogout ON -kcdAccount NONE
add tm trafficPolicy AAATM_POL_ADFS_LOGOUT "HTTP.REQ.URL.TO_LOWER.STARTSWITH(\"/adfs/ls\") && HTTP.REQ.URL.QUERY.VALUE(\"wa\").EQ(\"wsignout1.0\")" AAATM_PRF_ADFS_LOGOUT
bind lb vserver LBVS_ADFS_PROXY_ACTIVE_PASSIVE -policyName AAATM_POL_ADFS_LOGIN -priority 100 -gotoPriorityExpression END -type REQUEST
bind lb vserver LBVS_ADFS_PROXY_ACTIVE_PASSIVE -policyName AAATM_POL_ADFS_LOGOUT -priority 110 -gotoPriorityExpression END -type REQUEST
<!--NeedCopy-->
初期認証フローを構成する
# Pattern Set - Gateway and AAA Hostname
add policy patset PATSET_GATEWAY_HOSTHEADER
bind policy patset PATSET_GATEWAY_HOSTHEADER access.ctxdemos.com -index 1 -charset ASCII
bind policy patset PATSET_GATEWAY_HOSTHEADER aaa.ctxdemos.com -index 2 -charset ASCII
# Policy Expression - Gateway and AAA Hostname
add policy expression is_GATEWAY_HOSTNAME "HTTP.REQ.HEADER(\"Host\").TO_LOWER.CONTAINS_ANY(\"PATSET_GATEWAY_HOSTHEADER\")"
# Create Initialization Load Balancing vServer
add lb vserver LBVS_SAML_SP_INITIALIZATION SSL 0.0.0.0 0 -persistenceType NONE -cltTimeout 180 -Authentication ON -authnProfile AAA_AUTH_PRF
set ssl vserver LBVS_SAML_SP_INITIALIZATION -ssl3 DISABLED -tls1 DISABLED -tls11 DISABLED -tls13 ENABLED -ocspStapling ENABLED -HSTS ENABLED -maxage 157680000 -IncludeSubdomains YES
bind lb vserver LBVS_SAML_SP_INITIALIZATION LBSVC_ALWAYS_UP
bind ssl vserver LBVS_SAML_SP_INITIALIZATION -certkeyName CTXDEMOS_PUBLIC_CERT
bind ssl vserver LBVS_SAML_SP_INITIALIZATION -cipherName CTXDEMOS_FRONTEND_APLUS
# Create Initialization Content Switching Policy and Action
add cs action CSACT_SAML_SP_INITIALIZATION -targetLBVserver LBVS_SAML_SP_INITIALIZATION
add cs policy CSPOL_SAML_SP_INITIALIZATION -rule "is_GATEWAY_HOSTNAME && HTTP.REQ.URL.PATH.TO_LOWER.STARTSWITH(\"/samltolb\")" -action CSACT_SAML_SP_INITIALIZATION
# Bind Content Switching Policies to Citrix Gateway Content Switching vServer
bind cs vserver CSVS_UGCTXDEMOS -policyName CSPOL_SAML_SP_INITIALIZATION -priority 500
# Create Initialization Citrix ADC AAA Traffic Policy and Action and Bind it to Load Balancing vServer
add tm samlSSOProfile AAATM_SAMLSSOPRF_VPN_TO_LB -samlSigningCertName CTXDEMOS_PUBLIC_CERT -assertionConsumerServiceURL "https://access.ctxdemos.com/cgi/samlauth" -relaystateRule "HTTP.REQ.URL.QUERY.VALUE(\"RelayState\")" -signatureAlg RSA-SHA256 -digestMethod SHA256 -Attribute1 Password -Attribute1Expr AAA.USER.PASSWD -Attribute2 Groups -Attribute2Expr AAA.USER.GROUPS -encryptAssertion ON -samlSPCertName CTXDEMOS_PUBLIC_CERT
add tm trafficAction AAATM_PRF_VPN_TO_LB -SSO ON -persistentCookie OFF -InitiateLogout OFF -kcdAccount NONE -samlSSOProfile AAATM_SAMLSSOPRF_VPN_TO_LB
add tm trafficPolicy AAATM_POL_VPN_TO_LB "HTTP.REQ.URL.STARTSWITH(\"/samltolb\")" AAATM_PRF_VPN_TO_LB
bind lb vserver LBVS_SAML_SP_INITIALIZATION -policyName AAATM_POL_VPN_TO_LB -priority 100 -gotoPriorityExpression END -type REQUEST
<!--NeedCopy-->
暗号グループ
# Create Cipher Group for Backend vServers
add ssl cipher CTXDEMOS_BACKEND
bind ssl cipher CTXDEMOS_BACKEND -cipherName TLS1.3-AES256-GCM-SHA384 -cipherPriority 1
bind ssl cipher CTXDEMOS_BACKEND -cipherName TLS1.3-CHACHA20-POLY1305-SHA256 -cipherPriority 2
bind ssl cipher CTXDEMOS_BACKEND -cipherName TLS1.3-AES128-GCM-SHA256 -cipherPriority 3
bind ssl cipher CTXDEMOS_BACKEND -cipherName TLS1.2-ECDHE-RSA-AES256-GCM-SHA384 -cipherPriority 4
bind ssl cipher CTXDEMOS_BACKEND -cipherName TLS1.2-ECDHE-RSA-AES128-GCM-SHA256 -cipherPriority 5
bind ssl cipher CTXDEMOS_BACKEND -cipherName TLS1.2-ECDHE-ECDSA-AES256-GCM-SHA384 -cipherPriority 6
bind ssl cipher CTXDEMOS_BACKEND -cipherName TLS1.2-ECDHE-ECDSA-AES128-GCM-SHA256 -cipherPriority 7
# Create Cipher Group for Frondend vServers
add ssl cipher CTXDEMOS_FRONTEND
bind ssl cipher CTXDEMOS_FRONTEND -cipherName TLS1.3-AES256-GCM-SHA384 -cipherPriority 1
bind ssl cipher CTXDEMOS_FRONTEND -cipherName TLS1.3-CHACHA20-POLY1305-SHA256 -cipherPriority 2
bind ssl cipher CTXDEMOS_FRONTEND -cipherName TLS1.3-AES128-GCM-SHA256 -cipherPriority 3
bind ssl cipher CTXDEMOS_FRONTEND -cipherName TLS1.2-ECDHE-ECDSA-AES128-GCM-SHA256 -cipherPriority 4
bind ssl cipher CTXDEMOS_FRONTEND -cipherName TLS1.2-ECDHE-ECDSA-AES256-GCM-SHA384 -cipherPriority 5
bind ssl cipher CTXDEMOS_FRONTEND -cipherName TLS1.2-ECDHE-ECDSA-AES128-SHA256 -cipherPriority 6
bind ssl cipher CTXDEMOS_FRONTEND -cipherName TLS1.2-ECDHE-ECDSA-AES256-SHA384 -cipherPriority 7
bind ssl cipher CTXDEMOS_FRONTEND -cipherName TLS1-ECDHE-ECDSA-AES128-SHA -cipherPriority 8
bind ssl cipher CTXDEMOS_FRONTEND -cipherName TLS1-ECDHE-ECDSA-AES256-SHA -cipherPriority 9
bind ssl cipher CTXDEMOS_FRONTEND -cipherName TLS1.2-ECDHE-RSA-AES128-GCM-SHA256 -cipherPriority 10
bind ssl cipher CTXDEMOS_FRONTEND -cipherName TLS1.2-ECDHE-RSA-AES256-GCM-SHA384 -cipherPriority 11
bind ssl cipher CTXDEMOS_FRONTEND -cipherName TLS1.2-ECDHE-RSA-AES-128-SHA256 -cipherPriority 12
bind ssl cipher CTXDEMOS_FRONTEND -cipherName TLS1.2-ECDHE-RSA-AES-256-SHA384 -cipherPriority 13
bind ssl cipher CTXDEMOS_FRONTEND -cipherName TLS1-ECDHE-RSA-AES128-SHA -cipherPriority 15
bind ssl cipher CTXDEMOS_FRONTEND -cipherName TLS1-ECDHE-RSA-AES256-SHA -cipherPriority 16
bind ssl cipher CTXDEMOS_FRONTEND -cipherName TLS1.2-DHE-RSA-AES128-GCM-SHA256 -cipherPriority 17
bind ssl cipher CTXDEMOS_FRONTEND -cipherName TLS1.2-DHE-RSA-AES256-GCM-SHA384 -cipherPriority 18
bind ssl cipher CTXDEMOS_FRONTEND -cipherName TLS1-DHE-RSA-AES-128-CBC-SHA -cipherPriority 19
bind ssl cipher CTXDEMOS_FRONTEND -cipherName TLS1-DHE-RSA-AES-256-CBC-SHA -cipherPriority 20
# Create Cipher Group for Frondend vServers - A+
add ssl cipher CTXDEMOS_FRONTEND_APLUS
bind ssl cipher CTXDEMOS_FRONTEND_APLUS -cipherName TLS1.3-AES256-GCM-SHA384 -cipherPriority 1
bind ssl cipher CTXDEMOS_FRONTEND_APLUS -cipherName TLS1.3-CHACHA20-POLY1305-SHA256 -cipherPriority 2
bind ssl cipher CTXDEMOS_FRONTEND_APLUS -cipherName TLS1.3-AES128-GCM-SHA256 -cipherPriority 3
bind ssl cipher CTXDEMOS_FRONTEND_APLUS -cipherName TLS1.2-ECDHE-ECDSA-AES256-GCM-SHA384 -cipherPriority 4
bind ssl cipher CTXDEMOS_FRONTEND_APLUS -cipherName TLS1.2-ECDHE-ECDSA-AES128-GCM-SHA256 -cipherPriority 5
bind ssl cipher CTXDEMOS_FRONTEND_APLUS -cipherName TLS1.2-ECDHE-ECDSA-CHACHA20-POLY1305 -cipherPriority 6
bind ssl cipher CTXDEMOS_FRONTEND_APLUS -cipherName TLS1.2-ECDHE-ECDSA-AES256-SHA384 -cipherPriority 7
bind ssl cipher CTXDEMOS_FRONTEND_APLUS -cipherName TLS1.2-ECDHE-ECDSA-AES128-SHA256 -cipherPriority 8
bind ssl cipher CTXDEMOS_FRONTEND_APLUS -cipherName TLS1.2-ECDHE-RSA-AES256-GCM-SHA384 -cipherPriority 9
bind ssl cipher CTXDEMOS_FRONTEND_APLUS -cipherName TLS1.2-ECDHE-RSA-AES128-GCM-SHA256 -cipherPriority 13
bind ssl cipher CTXDEMOS_FRONTEND_APLUS -cipherName TLS1.2-ECDHE-RSA-CHACHA20-POLY1305 -cipherPriority 14
bind ssl cipher CTXDEMOS_FRONTEND_APLUS -cipherName TLS1.2-ECDHE-RSA-AES-256-SHA384 -cipherPriority 15
bind ssl cipher CTXDEMOS_FRONTEND_APLUS -cipherName TLS1.2-ECDHE-RSA-AES-128-SHA256 -cipherPriority 16
<!--NeedCopy-->
ログインスキーマXMLファイル
CTXDEMOS_USER_NAME_PASS.XML
<?xml version="1.0" encoding="utf-8"?>
<AuthenticateResponse xmlns="http://citrix.com/authentication/response/1">
<Status>success</Status>
<Result>more-info</Result>
<StateContext/>
<AuthenticationRequirements>
<PostBack>/nf/auth/doAuthentication.do</PostBack>
<CancelPostBack>/Citrix/Authentication/ExplicitForms/CancelAuthenticate</CancelPostBack>
<CancelButtonText>Cancel</CancelButtonText>
<Requirements>
<Requirement>
<Credential>
<ID>login</ID>
<SaveID>ExplicitForms-Username</SaveID>
<Type>username</Type>
</Credential>
<Label>
<Text>User name</Text>
<Type>plain</Type>
</Label>
<Input>
<AssistiveText>Please supply username</AssistiveText>
<Text>
<Secret>false</Secret>
<ReadOnly>false</ReadOnly>
<InitialValue>${AAA.USER.NAME}</InitialValue>
<Constraint>.+</Constraint>
</Text>
</Input>
</Requirement>
<Requirement>
<Credential>
<ID>passwd</ID>
<SaveID>ExplicitForms-Password</SaveID>
<Type>password</Type>
</Credential>
<Label>
<Text>Password:</Text>
<Type>plain</Type>
</Label>
<Input>
<Text>
<Secret>true</Secret>
<ReadOnly>false</ReadOnly>
<InitialValue/>
<Constraint>.+</Constraint>
</Text>
</Input>
</Requirement>
<Requirement>
<Credential>
<ID>saveCredentials</ID>
<Type>savecredentials</Type>
</Credential>
<Label>
<Text>Remember my password</Text>
<Type>plain</Type>
</Label>
<Input>
<CheckBox>
<InitialValue>false</InitialValue>
</CheckBox>
</Input>
</Requirement>
<Requirement>
<Credential>
<ID>loginBtn</ID>
<Type>none</Type>
</Credential>
<Label>
<Type>none</Type>
</Label>
<Input>
<Button>Log On</Button>
</Input>
</Requirement>
</Requirements>
</AuthenticationRequirements>
</AuthenticateResponse>
<!--NeedCopy-->
CTXDEMOS_USER_NAME_ONLY.XML
<?xml version="1.0" encoding="utf-8"?>
<AuthenticateResponse xmlns="http://citrix.com/authentication/response/1">
<Status>success</Status>
<Result>more-info</Result>
<StateContext/>
<AuthenticationRequirements>
<PostBack>/nf/auth/doAuthentication.do</PostBack>
<CancelPostBack>/Citrix/Authentication/ExplicitForms/CancelAuthenticate</CancelPostBack>
<CancelButtonText>Cancel</CancelButtonText>
<Requirements>
<Requirement>
<Credential>
<ID>login</ID>
<SaveID>ExplicitForms-Username</SaveID>
<Type>username</Type>
</Credential>
<Label>
<Text>User name</Text>
<Type>plain</Type>
</Label>
<Input>
<AssistiveText>Please supply username</AssistiveText>
<Text>
<Secret>false</Secret>
<ReadOnly>false</ReadOnly>
<InitialValue/>
<Constraint>.+</Constraint>
</Text>
</Input>
</Requirement>
<Requirement>
<Credential>
<Type>none</Type>
</Credential>
<Label>
<Text> Please submit credentials to continue Login ...</Text>
<Type>confirmation</Type>
</Label>
<Input/>
</Requirement>
<Requirement>
<Credential>
<ID>saveCredentials</ID>
<Type>savecredentials</Type>
</Credential>
<Label>
<Text>Remember my password</Text>
<Type>plain</Type>
</Label>
<Input>
<CheckBox>
<InitialValue>false</InitialValue>
</CheckBox>
</Input>
</Requirement>
<Requirement>
<Credential>
<ID>loginBtn</ID>
<Type>none</Type>
</Credential>
<Label>
<Type>none</Type>
</Label>
<Input>
<Button>Log On</Button>
</Input>
</Requirement>
</Requirements>
</AuthenticationRequirements>
</AuthenticateResponse>
<!--NeedCopy-->
参考文献
サーバー2016上のAD FS 4.0、Citrix FAS、およびAzureクラウド内のAzure MFAを使用したNetScalerへの認証。(2018)。https://www.jgspiers.com/authentication-to-netscaler-using-ad-fs-4-0-server-2016-citrix-fas-azure-mfa-azure-cloud/から取得
AD FSでAzure MFAを認証プロバイダーとして構成する。(2019)。https://docs.microsoft.com/ja-jp/windows-server/identity/ad-fs/operations/configure-ad-fs-and-azure-mfaより取得
フェデレーションサーバーファームの展開。(2017). Retrieved from https://docs.microsoft.com/ja-jp/windows-server/identity/ad-fs/deployment/deploying-a-federation-server-farm
フェデレーション認証サービスADFSの展開。(2018). Retrieved from https://docs.citrix.com/ja-jp/citrix-virtual-apps-desktops/secure/federated-authentication-service/fas-architectures/fas-adfs.html
NetScalerをActive Directoryフェデレーションサービスプロキシとして展開するためのガイド。(n.d.). Retrieved from https://www.citrix.com/content/dam/citrix/en_us/documents/products-solutions/guide-to-deploying-netscaler-as-an-active-directory-federation-services-proxy.pdf
Azure 多要素認証の仕組み。(2018)。https://docs.microsoft.com/ja-jp/azure/active-directory/authentication/concept-mfa-howitworksより取得
クラウドベースのAzure 多要素認証展開の計画。(2019)。https://docs.microsoft.com/ja-jp/azure/active-directory/authentication/howto-mfa-getstartedより取得
ティール・ファン・デン・ブルック。(2017年12月7日)。NetScalerを使用したWindows Server 2012 R2上のADFS v3。https://www.citrix.com/blogs/2015/05/29/adfs-v3-on-windows-server-2012-r2-with-netscaler/より取得
Citrix Gatewayを使用したハイブリッドクラウドおよびSaaSへの移行。(n.d.). Retrieved from https://www.citrix.com/products/citrix-gateway/resources/netscaler-unified-gateway.html
Azure Active Directoryパススルー認証によるユーザーサインイン。(2018)。https://docs.microsoft.com/ja-jp/azure/active-directory/hybrid/how-to-connect-ptaより取得
執筆者: Saman Salehian (リードネットワーキングセールスエンジニア)