OAuth IdPとしてのNetScaler ADC
Citrix ADCは、OpenID-Connect(OIDC)プロトコルを使用してアイデンティティプロバイダーとして構成できるようになりました。OIDCプロトコルは、Citrix ADCのID提供機能を強化します。OIDC は、ユーザーパスワードを転送せず、特定の有効期間を持つトークンを使用することで、セキュリティを強化するため、シングルサインオンでエンタープライズワイドホストアプリケーションにアクセスできるようになりました。OpenIDは、アプリやサービスなどの非ブラウザクライアントと統合するようにも設計されています。したがって、OIDC プロトコルは多くの実装で広く採用されています。
注:
OIDCプロトコルを使用してOAuth IdPとして動作するには、Citrix ADCがバージョン12.1以降である必要があります。
NetScaler ADCをOAuth IdPとして持つ利点
- ユーザーが組織全体で 1 つの ID を持つため、複数の認証パスワードを維持するオーバーヘッドを排除します。
- パスワードは ID プロバイダでのみ共有され、アクセスするアプリケーションとは共有されないため、パスワードの堅牢なセキュリティを提供します。
- さまざまなシステムとの膨大な相互運用性を提供し、ホストされたアプリケーションが OpenID を受け付けやすくなります。
注
ソリューションが機能するには、NetScaler ADC Advanced Edition以上が必要です。
GUI を使用して Citrix ADC を OAuth IdP として構成するには
-
[ 構成] > [セキュリティ] > [AAA アプリケーショントラフィック] > [ポリシー] > [認証] > [高度なポリシー] > [OAuth IdP]に移動します。
-
[ プロファイル ] をクリックし、[ 追加] をクリックします。
[ 認証 OAuth IDP プロファイルの作成 ] 画面で、次のパラメータの値を設定し、[ 作成] をクリックします。
-
Name :認証プロファイルの名前。文字、数字、またはアンダースコア文字(_)で始まり、文字、数字、ハイフン(-)、ピリオド(.)ポンド(#)、スペース()、アットマーク(@)、等号(=)、コロン(:)、およびアンダースコア文字のみを含める必要があります。プロファイルの作成後は変更できません。
- Client ID - サービスプロバイダーを識別する一意の文字列。認証サーバーは、この ID を使用してクライアント構成を推測します。最大文字数:127。
- Client Secret - ユーザーと承認サーバーによって確立されたシークレット文字列。最大文字数:239。
- リダイレクト URL — コード/トークンのポスト先となる SP 上のエンドポイント。
- [Issuer Name ]:トークンを受け付けるサーバーの ID。最大文字数:127。
- オーディエンス — IdP によって送信されるトークンのターゲット受信者。これは受信者がチェックするかもしれません。
- スキュー時間 :このオプションは、NetScaler 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 authentication succeeds in addition to the extracted groups. Maximum Length: 63.
-
-
[ポリシー] をクリックし、[追加] をクリックします
-
[ 認証 OAuth IDP ポリシーの作成 ] 画面で、次のパラメータの値を設定し、[ 作成] をクリックします。
- Name - 認証ポリシーの名前。
- Action - 以前に作成されたプロファイルの名前。
- Log Action - 要求がこのポリシーに一致する場合に使用するメッセージログアクションの名前。必須の提出ではありません。
- Undefined-Resultアクション :ポリシー評価の結果が未定義(UNDEF)である場合に実行するアクション。必須フィールドではありません。
- Expression - ポリシーが特定の要求に応答するために使用するデフォルトの構文式。例:true。
- Comments - ポリシーに関するコメント。
OAuthIdP ポリシーと LDAP ポリシーを認証仮想サーバーにバインドする
-
設定 > セキュリティ > AAA アプリケーショントラフィック > ポリシー > 認証 > 詳細ポリシー > アクション > LDAPに移動します。
-
[ LDAP アクション ] 画面で、[ 追加] をクリックします。
-
[ 認証 LDAP サーバーの作成 ] 画面で、次のパラメータの値を設定し、[ 作成] をクリックします。
- Name — LDAP アクションの名前
- サーバ名/サーバ IP — LDAP サーバの FQDN または IP を指定します。
- [ セキュリティタイプ]、[ポート]、[サーバータイプ]、[タイムアウト] の適切な値を選択する
- [ 認証] がオンになっていることを確認します
- ベース DN: LDAP 検索を開始する基本。例えば、dc=aaa、dc=local。
-
管理者バインド DN: LDAP サーバーへのバインドのユーザー名。例:
admin@aaa.local
。 - 管理者パスワード/パスワードの確認:LDAP をバインドするためのパスワード
- [ 接続のテスト ] をクリックして、設定をテストします。
- サーバーログオン名属性:「samAccountName」を選択します。
- その他のフィールドは必須ではないため、必要に応じて設定できます。
-
設定 > セキュリティ > AAA アプリケーショントラフィック > ポリシー > 認証 > 詳細ポリシー > ポリシーにナビゲートして下さい。
-
[ 認証ポリシー ] 画面で、[ 追加] をクリックします。
-
[ 認証ポリシーの作成 ] ページで、次のパラメータの値を設定し、[ 作成] をクリックします。
- Name — LDAP 認証ポリシーの名前。
- [アクションタイプ] — [ LDAP] を選択します。
- [アクション] — LDAP アクションを選択します。
- Expression — ポリシーが特定のリクエストに応答するために使用するデフォルトの構文式。例:true**。
OAuth機能は、証明書利用者側(RP)側およびNetScaler GatewayおよびNetScaler ADCのIdP側からのトークンAPIで次の機能をサポートするようになりました。
-
PKCE(コード交換のための証明キー)のサポート
-
client_assertion のサポート
CLIを使用して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)
への応答として送信されます。- NetScaler ADC 13.0—85.19リリース以降、OAuth IdPイントロスペクティブエンドポイントはこのプロパティ
active: true
をサポートします認証仮想サーバーが OAuth IdP として構成されている場合、既知の OAuth IdP 検出エンドポイント URL は
https://<netscaler-oauth-idp-fqdn>/oauth/idp/.well-known/openid-configuration
である必要があります。- OAuth IdPとして構成されたCitrix ADCは、OAuth SPに送信される
.well-known-Endpoint
応答に、client_secret_post
、client_secret_jwt
、private_key_jwt
およびclient_secret_basic
トークンエンドポイントの認証方法を表示しません。
OIDC プロトコルでの暗号化されたトークンのサポート
OIDCメカニズムを備えたCitrix ADCは、暗号化されたトークンと署名されたトークンの送信をサポートするようになりました。Citrix ADCはJSON Web暗号化仕様を使用して暗号化されたトークンを計算し、暗号化されたトークンのコンパクトなシリアル化のみをサポートします。OpenIDトークンを暗号化するには、Citrix ADCは依存パーティ(RP)の公開鍵を必要とします。公開鍵は、依存パーティの既知の構成エンドポイントをポーリングすることによって動的に取得されます。
新しい「relyingPartyMetadataURL」オプションが「認証 OAuthidpProfile」プロフィールに導入されました。
CLI を使用して証明書利用者のエンドポイントを設定するには
コマンドプロンプトで入力します:
```set authentication OAuthIDPProfile
- **relyingPartyMetadataURL** :NetScaler 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」が存在する場合、NetScaler 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 に挿入される属性の名前を表すリテラル文字列です。
注:
次の例では、
q{myname=http.req.user.name@@@ssn="123456789"@@@jit="false"@@@groups=http.req.user.groups}
式の最大値は 2000 バイトです。これには 4 つのカスタム属性 (myname、ssn、jit、グループ) が含まれています。各カスタム属性の最大値は 10000 バイトです。たとえば、グループ属性 (PI 式http.req.user.groups
に基づいて評価される) の OIDCid_Token には、最大 10000 バイトのデータを含めることができます。例:
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 式です。
NetScaler Gatewayでのアクティブ/アクティブGSLB展開のサポート
OIDCプロトコルを使用してアイデンティティプロバイダ(IdP)として構成されたNetScaler Gateway は、アクティブ/アクティブGSLB展開をサポートできます。NetScaler Gateway IdPでのアクティブ/アクティブGSLB展開では、複数の地理的ロケーションで受信したユーザーログイン要求を負荷分散できます。
重要
セキュリティを強化するために、CA証明書をSSLサービスにバインドし、SSLサービスで証明書検証を有効にすることをお勧めします。
GSLB セットアップの設定について詳しくは、「GSLB のセットアップと設定の例」を参照してください。