Citrix ADC

OAuth IdPとしてのCitrix ADC

OpenID-Connect(OIDC)プロトコルを使用して、Citrix ADCアプライアンスをIDプロバイダーとして構成できるようになりました。OIDCプロトコルは、Citrix ADCアプライアンスのID提供機能を強化します。OIDC は、ユーザーパスワードを転送せず、特定の有効期間を持つトークンを使用することで、セキュリティを強化するため、シングルサインオンで企業全体でホストされるアプリケーションにアクセスできるようになりました。OpenIDはまた、アプリやサービスなどの非ブラウザクライアントと統合するように設計されています。そのため、OIDCプロトコルは多くの実装で広く採用されています。

注: アプライアンスがOIDCプロトコルを使用してOAuth IdPとして機能するには、Citrix ADCがバージョン12.1以降である必要があります。

Citrix ADCをOAuth IdPとして持つメリット

  • ユーザーが組織全体で 1 つの ID を持つため、複数の認証パスワードを維持するオーバーヘッドを排除します。
  • パスワードは ID プロバイダーでのみ共有され、アクセスするアプリケーションとは共有されないため、パスワードに堅牢なセキュリティを提供します。
  • さまざまなシステムとの広大な相互運用性を提供し、ホストされたアプリケーションが OpenID を受け付けやすくなりました。

注: ソリューションが機能するには、Citrix ADC Advanced Edition以降が必要です。

GUIを使用してCitrix ADCアプライアンスをOAuth IdPとして構成するには

  1. [設定] > [セキュリティ] > [AAA アプリケーショントラフィック] > [ポリシー] > [認証] > [高度なポリシー] > [OAuth IdP] に移動します。

  2. [プロファイル] をクリックし、[追加] をクリックします。

    認証 OAuth IDP プロファイルの作成」 画面で、次のパラメータの値を設定し、「 作成 」をクリックします。

    • [Name]:認証プロファイルの名前。文字、数字、またはアンダースコア文字 (_) で始まり、文字、数字、ハイフン (-)、ピリオド (.)、ポンド (#)、スペース ()、アットマーク (@)、等しい (=)、コロン (:)、およびアンダースコア文字のみを含める必要があります。プロファイルの作成後は変更できません。

    • クライアントID :SPを識別する一意の文字列。認可サーバは、この ID を使用してクライアント設定を推測します。最大長さ:127。
    • Client Secret — ユーザーと認可サーバーによって確立されたシークレット文字列。最大長さ:239。
    • リダイレクトURL :コード/トークンを投稿する必要があるSP上のエンドポイント。
    • 発行者名: トークンが受け入れられるサーバーの ID。最大長さ:127。
    • 対象者 — IdP によって送信されるトークンのターゲット受信者。これは、 受信者が確認することがあります。
    • SkewTime:このオプションはCitrix ADCアプライアンスが受信トークンに対して許可するクロックスキューを分単位で指定します。たとえば、SkewTimeが10の場合、トークンは(現在の時間-10)分から(現在の時間+10)分まで、つまり20分の範囲で有効です。デフォルト値:5
    • Default Authentication Group — ポリシーの評価を簡素化し、ポリシーのカスタマイズを支援するために、このプロファイルのセッションに追加されるグループ。これは、抽出されたグループに加えて authenticatiobが成功したときに選択されるデフォルトのグループです。最大長さ:63。
  3. [ポリシー] をクリックし、[**追加] ** をクリックします。

  4. 認証 OAuth IDP ポリシーの作成 」画面で、次のパラメータの値を設定し、「 作成 」をクリックします。

    • Name — 認証ポリシーの名前。
    • アクション — 上記で作成したプロファイルの名前。
    • Log Action:要求がこのポリシーに一致する場合に使用するメッセージログアクションの名前。提出必須ではありません。
    • 未定義の結果アクション:ポリシー評価の結果が未定義 (UNDEF)の場合に実行するアクション。必須フィールドではありません。
    • Expression:ポリシーが特定の要求に応答するために使用するデフォルトの構文式。たとえば、trueです。
    • [Comments] :ポリシーに関するコメント。

認証仮想サーバーへの OAuthIDP ポリシーと LDAP ポリシーのバインド

  1. [設定] > [セキュリティ] > [AAA アプリケーショントラフィック] > [ポリシー] > [認証] > [高度なポリシー] > [アクション] > [LDAP]に移動します。

  2. [LDAP アクション] 画面で、[追加] をクリックします。

  3. [認証 LDAP サーバーの作成] 画面で、次のパラメーターの値を設定し、[作成] をクリックします。

    • 名前 — ldap アクションの名前。
    • サーバー名/サーバーIP — LDAP サーバーの FQDN または IP を指定します。
    • [セキュリティタイプ]、[ポート]、[サーバタイプ]、[タイムアウト] に適切な値を選択します。
    • [認証] がオンになっていることを確認します。
    • ベース DN: LDAP 検索を開始するベース。たとえば、dc=aaa、dc=ローカルです。
    • 管理者バインド DN: LDAP サーバーへのバインドのユーザー名。たとえば、 admin@aaa.local のように指定します。
    • 管理者パスワード/パスワードの確認:LDAP をバインドするためのパスワード
    • [接続のテスト] をクリックして、設定をテストします。
    • サーバーのログオン名属性:「sAMアカウント名」 を選択します。
    • その他のフィールドは必須ではないため、必要に応じて設定できます。
  4. [設定] > [セキュリティ] > [AAA アプリケーショントラフィック] > [ポリシー] > [認証] > [高度なポリシー] > [ポリシー] に移動します。

  5. [認証ポリシー] 画面で、[追加] をクリックします。

  6. [認証ポリシーの作成] ページで、次のパラメータの値を設定し、[作成] をクリックします。

    • 「名前」— LDAP 認証ポリシーの名前。
    • アクションタイプ— [LDAP] を選択します。
    • アクション」— LDAP アクションを選択します。
    • [Expression]: ポリシーが特定の要求に応答するために使用するデフォルトの構文式。たとえば、trueです。

コマンドラインでOIDCプロトコルを使用して、Citrix ADCアプライアンスをIdPとして構成するには

コマンドプロンプトで、次のコマンドを入力します。

  • add authentication OAuthIDPProfile <name> [-clientID <string>][-clientSecret ][-redirectURL <URL>][-issuer <string>][-audience <string>][-skewTime <mins>] [-defaultAuthenticationGroup <string>]
  • add authentication OAuthIdPPolicy <name> -rule <expression> [-action <string> [-undefAction <string>] [-comment <string>][-logAction <string>]

  • add authentication ldapAction aaa-ldap-act -serverIP 10.0.0.10 -ldapBase "dc=aaa,dc=local"

  • ldapBindDn <administrator@aaa.local> -ldapBindDnPassword <password> -ldapLoginName sAMAccountName

  • add authentication policy aaa-ldap-adv-pol -rule true -action aaa-ldap-act

  • bind authentication vserver auth_vs -policy <ldap_policy_name> -priority 100 -gotoPriorityExpression NEXT

  • bind authentication vserver auth_vs -policy <OAuthIDPPolicyName> -priority 5 -gotoPriorityExpression END

  • bind vpn global –certkey <>

複数のキーをバインドできます。バインドされた証明書のパブリック部分は、jwks\_uri query (https://gw/oauth/idp/certs)への応答として送信されます。

OIDCプロトコルでの暗号化トークンのサポート

OIDCメカニズムを備えたCitrix ADCアプライアンスは、暗号化されたトークンの送信と署名付きトークンの送信をサポートするようになりました。Citrix ADCアプライアンスは、JSON Web暗号化仕様を使用して暗号化されたトークンを計算し、暗号化されたトークンのコンパクトシリアル化のみをサポートします。OpenIDトークンを暗号化するには、Citrix ADCアプライアンスに証明書利用者(RP)の公開鍵が必要です。公開キーは、証明書利用者の既知の構成エンドポイントをポーリングすることによって動的に取得されます。

新しい「relyingPartyMetadataURL」オプションが「authentication OAuthIDPProfile」プロファイルで導入されました。

CLIを使用して証明書利用者のエンドポイントを構成するには

コマンドプロンプトで、次のように入力します。

set authentication OAuthIDPProfile <name> [-relyingPartyMetadataURL <URL>] [-refreshInterval <mins>] [-status < >]

  • relyingPartyMetadataURL-Citrix ADC IdPが構成されている証明書利用者に関する詳細を取得できるエンドポイント。メタデータ応答には、RP 公開キーの jwks_uri のエンドポイントが含まれている必要があります。

  • refreshInterval :証明書を更新するためにこのエンドポイントがポーリングされる頻度を、分単位で定義します。

  • status -ポーリング操作のステータスを反映します。Citrix ADCアプライアンスが公開鍵を正常に取得すると、ステータスは完了です。

    set authentication OAuthIDPProfile sample_profile -relyingPartyMetadataURL https://rp.customer.com/metadata -refreshInterval 50 -status < >
    

エンドポイントを構成すると、Citrix ADCアプライアンスは最初に証明書利用者の既知のエンドポイントをポーリングして構成を読み込みます。現在、Citrix ADCアプライアンスは「jwks_uri」エンドポイントのみを処理します。

  • 応答に ‘jwks_uri’がない場合、プロファイルのステータスは完了しません。
  • 応答に ‘jwks_uri’が存在する場合、Citrix ADCはそのエンドポイントもポーリングして、証明書利用者の公開鍵を読み取ります。

注: トークン暗号化では、RSAES-OAEP および AES GCM 暗号化タイプのアルゴリズムのみがサポートされています。

OpenID コネクトでのカスタム属性のサポート

OpenID 証明書利用者は、ユーザープロファイルの作成や承認の決定を行うために、トークン内にユーザー名またはユーザープリンシパル名 (UPN) 以上のものを必要とする場合があります。ほとんどの場合、ユーザグループはユーザの認可ポリシーを適用する必要があります。場合によっては、ユーザーアカウントのProvisioning に姓や名などの詳細情報が必要になることがあります。

IdPとして構成されたCitrix ADCアプライアンスは、式を使用してOIDCid_tokenに余分な属性を送信するために使用できます。高度なポリシー式は、要件に従ってカスタム属性を送信するために使用されます。Citrix IdPは、属性に対応する式を評価し、最終的なトークンを計算します。

Citrix ADCアプライアンスは、自動的に出力データをJSON化します。たとえば、数値 (SSN など) やブール値 (true または false) は引用符で囲まれません。グループなどの複数値を持つ属性は、配列マーカー(「[“と”]」) 内に配置されます。複合型属性は自動的に計算されず、要件に従ってこれらの複合値の PI 式を設定できます。

CLIを使用して証明書利用者のエンドポイントを構成するには

コマンドプロンプトで、次のように入力します。

set oauthidpprofile <name> -attributes <AAA-custom-attribute-pattern>

<AAA-custom-attribute-pattern>は 、次のように記述できます。

Attribute1=PI-Expression@@@attribute2=PI-Expression@@@

「attribute1」,「attribute2」は、id_token に挿入される属性の名前を表すリテラル文字列です。

注: 最大 2,000 バイトの属性を設定できます。

例: set oauthidpprofile sample_1 -attributes q{myname=http.req.user.name@@@ssn="123456789"@@@jit="false"@@@groups=http.req.user.groups}

  • 前の PI 式は、属性に対して使用される値を表す高度なポリシー式です。PI式は、「ハードコードされた文字列」などの文字列リテラルを送信するために使用できます。文字列リテラルは、開始とパターンを囲む一重引用符または二重引用符で囲まれています(上記のように、開始パターンは”q{“です)。属性の値が文字列リテラルでない場合、式は実行時に評価され、その値はトークンで送信されます。実行時に値が空の場合、対応する属性が ID トークンに追加されません。
  • この例で定義されているように、「false」は属性「jit」のリテラル文字列です。また、「ssn」には参照用にハードコードされた値があります。グループと「myname」は、文字列を生成する PI 式です。

Citrix Gatewayでのアクティブ/アクティブGSLB展開のサポート

OIDCプロトコルを使用してIDプロバイダ(IdP)として構成されたCitrix Gatewayは、アクティブ/アクティブGSLB展開をサポートできます。Citrix Gateway IdPのアクティブ/アクティブGSLB展開では、複数の地理的ロケーションで着信ユーザーログイン要求を負荷分散できます。

重要

セキュリティを強化するために、CA証明書をSSLサービスにバインドし、SSLサービスで証明書検証を有効にすることをお勧めします。

GSLB セットアップの構成の詳細については、「GSLB のセットアップと設定の例」を参照してください。