Citrix ADC

OAuth IdPとしてのCitrix ADC

Citrix ADCアプライアンスは、OpenID-Connect(OIDC)プロトコルを使用して、アイデンティティプロバイダとして構成できるようになりました。OIDCプロトコルは、Citrix ADCアプライアンスのアイデンティティ提供機能を強化します。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 によって送信されるトークンのターゲット受信者。これは受信者がチェックするかもしれません。
    • スキュー時間 :このオプションは、Citrix ADCが受信トークンで許可するクロックスキューを分単位で指定します。たとえば、SkewTime が 10 の場合、トークンは (現在の時刻-10) 分から (現在時刻 + 10) 分、つまり 20 分まで有効です。デフォルト値:5。
    • デフォルト認証グループ — nFactor フローで使用できる IdP によってこのプロファイルが選択されたときに、セッション内部グループリストに追加されるグループ。これは、認証ポリシーに対して、式 (AAA.USER.IS_MEMBER_OF (「xxx」)) で使用できます。 依存パーティ関連の nfactor フローを特定します。最大長:63

    A group added to the session for this profile to simplify policy evaluation and help in customizing policies. This is the default group that is chosen when the authenticatiob succeeds in addition to the extracted groups. Maximum Length: 63.

  3. [ポリシー] をクリックし、[追加] をクリックします。

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

    • Name — 認証ポリシーの名前。
    • Action — 上記で作成したプロファイルの名前。
    • Log Action — リクエストがこのポリシーと一致する場合に使用する messageLog アクションの名前。必須の提出ではありません。
    • Undefined-Resultアクション :ポリシー評価の結果が未定義(UNDEF)である場合に実行するアクション。必須フィールドではありません。
    • — ポリシーが特定のリクエストに応答するために使用する高度なポリシー式。たとえば、trueです。
    • コメント — ポリシーに関するコメント。

OAuthIdP ポリシーと LDAP ポリシーを認証仮想サーバーにバインドする

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

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

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

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

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

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

    • Name — LDAP 認証ポリシーの名前。
    • [アクションタイプ] — [ LDAP] を選択します。
    • [アクション] — LDAP アクションを選択します。
    • 式 — ポリシーが特定のリクエストに応答するために使用する高度なポリシー式。たとえば、true**です。

OAuth機能は、証明書利用者側(RP)側およびCitrix GatewayおよびCitrix ADCのIdP側からのトークンAPIで次の機能をサポートするようになりました。

  • PKCE(コード交換のための証明キー)のサポート

  • client_assertion のサポート

コマンドラインで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 <>
<!--NeedCopy-->

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

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

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

新しい「relyingPartyMetadataURL」オプションが「認証 OAuthidpProfile」プロフィールに導入されました。

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

コマンドプロンプトで入力します。

```set authentication OAuthIDPProfile [-relyingPartyMetadataURL ] [-refreshInterval ] [-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 < >
    <!--NeedCopy-->

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

  • 応答に「jwks_uri」が存在しない場合、プロファイルのステータスは完了しません。
  • 応答に「jwks_uri」が存在する場合、Citrix ADCはそのエンドポイントをポーリングして、依存パーティの公開鍵を読み取ります。

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

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

OpenID 依存パーティは、ユーザープロファイルの作成や承認の決定を行うために、トークンにユーザー名またはユーザープリンシパル名 (UPN) 以上のユーザー名を必要とする場合があります。ほとんどの場合、ユーザーグループはユーザーに認可ポリシーを適用する必要があります。場合によっては、ユーザーアカウントのプロビジョニングに、姓や姓などの詳細が必要になることがあります。

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

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

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

コマンドプロンプトで入力します。

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

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

重要

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

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