OAuth IdPとしてのCitrix ADC
NetScalerアプライアンスは、OpenID-Connect(OIDC)プロトコルを使用してアイデンティティプロバイダーとして構成できるようになりました。OIDCプロトコルは、Citrix ADCアプライアンスのアイデンティティ提供機能を強化します。OIDC は、ユーザーパスワードを転送せず、特定の有効期間を持つトークンを使用することで、セキュリティを強化するため、シングルサインオンでエンタープライズワイドホストアプリケーションにアクセスできるようになりました。OpenID は、アプリやサービスなどのブラウザ以外のクライアントと統合するように設計されています。したがって、OIDC プロトコルは多くの実装で広く採用されています。
注
アプライアンスがOIDCプロトコルを使用してOAuth IdPとして機能するには、NetScalerがバージョン12.1以降である必要があります。
Citrix ADCをOAuth IdPとして持つ利点
- ユーザーが組織全体で 1 つの ID を持つため、複数の認証パスワードを維持するオーバーヘッドを排除します。
- パスワードは ID プロバイダでのみ共有され、アクセスするアプリケーションとは共有されないため、パスワードの堅牢なセキュリティを提供します。
- さまざまなシステムとの膨大な相互運用性を提供し、ホストされたアプリケーションが OpenID を受け付けやすくなります。
注
このソリューションが機能するには、NetScaler Advanced Edition以上が必要です。
GUIを使用してNetScalerアプライアンスをOAuth IdPとして構成するには
-
[ 構成] > [セキュリティ] > [AAA アプリケーショントラフィック] > [ポリシー] > [認証] > [高度なポリシー] > [OAuth IdP]に移動します。
-
[ プロファイル ] をクリックし、[ 追加] をクリックします。
[ 認証 OAuth IDP プロファイルの作成 ] 画面で、次のパラメータの値を設定し、[ 作成] をクリックします。
-
Name :認証プロファイルの名前。文字、数字、またはアンダースコア文字(_)で始まり、文字、数字、ハイフン(-)、ピリオド(.)ポンド(#)、スペース()、アットマーク(@)、等号(=)、コロン(:)、およびアンダースコア文字のみを含める必要があります。プロファイルの作成後は変更できません。
- クライアント ID :SP を識別する一意の文字列。認可サーバは、この ID を使用してクライアント設定を推測します。最大文字数:127。
- Client Secret — ユーザーと認可サーバーによって確立されたシークレット文字列。最大長:239
- リダイレクト URL — コード/トークンのポスト先となる SP 上のエンドポイント。
- [Issuer Name ]:トークンを受け付けるサーバーの ID。最大文字数:127。
- オーディエンス — IdP によって送信されるトークンのターゲット受信者。これは受信者がチェックするかもしれません。
- スキュー時間 — このオプションは、NetScalerが受信トークンで許容する許容クロックスキューを分単位で指定します。たとえば、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)である場合に実行するアクション。必須フィールドではありません。
- 表現 — ポリシーが特定のリクエストに応答するために使用する高度なポリシー表現。例: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 アクションを選択します。
- 表現 — ポリシーが特定のリクエストに応答するために使用する高度なポリシー表現。例:true**。
OAuth機能は、NetScaler GatewayとNetScalerの依存パーティ(RP)側とIdP側のトークンAPIで次の機能をサポートするようになりました。
-
PKCE(コード交換のための証明キー)のサポート
-
client_assertion のサポート
CLIを使用してOIDCプロトコルを使用してNetScalerアプライアンスを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)
への応答として送信されます。OAuth IdP イントロスペクティブエンドポイントは、プロパティ
active: true
をサポートします。
OIDC プロトコルでの暗号化されたトークンのサポート
OIDCメカニズムを備えたNetScalerアプライアンスは、暗号化されたトークンと署名付きトークンの送信をサポートするようになりました。NetScalerアプライアンスは、JSON Web暗号化仕様を使用して暗号化されたトークンを計算し、暗号化されたトークンのコンパクトなシリアル化のみをサポートします。OpenIDトークンを暗号化するには、NetScalerアプライアンスは依存パーティ(RP)の公開鍵を必要とします。公開鍵は、証明書利用者の既知の設定エンドポイントをポーリングすることで動的に取得されます。
新しい「relyingPartyMetadataURL」オプションが「認証 OAuthidpProfile」プロフィールに導入されました。
CLI を使用して証明書利用者のエンドポイントを設定するには
コマンドプロンプトで入力します。
```set authentication OAuthIDPProfile
- **RelyingPartyMetadataURL** -NetScaler IdPが構成中の依存パーティに関する詳細を取得できるエンドポイント。メタデータ応答には、RP 公開キーの jwks_uri のエンドポイントを含める必要があります。
- **refreshInterval** -証明書を分単位で更新するために、このエンドポイントをポーリングする必要があるレートを定義します。
- **status** -ポーリング操作のステータスを反映します。NetScalerアプライアンスが公開鍵を正常に取得すると、ステータスは完了です。
**例**
```
set authentication OAuthIDPProfile sample_profile -relyingPartyMetadataURL https://rp.customer.com/metadata -refreshInterval 50 -status < >
<!--NeedCopy-->
エンドポイントを構成すると、NetScalerアプライアンスはまず依存パーティの既知のエンドポイントをポーリングして構成を読み取ります。現在、Citrix ADCアプライアンスは「jwks_uri」エンドポイントのみを処理します。
- 応答に「jwks_uri」がない場合、プロファイルのステータスは完了していません。
- 応答に「jwks_uri」が存在する場合、NetScalerはそのエンドポイントもポーリングして依存パーティの公開鍵を読み取ります。
注:
トークン暗号化では、RSAES-OAEP および AES256 GCM 暗号化タイプのアルゴリズムのみがサポートされています。
OpenID コネクトでのカスタム属性のサポート
OpenID
証明書利用者は、ユーザープロファイルの作成や承認の決定を行うために、トークンに 1 つ以上のユーザー名またはユーザープリンシパル名 (UPN) を要求する場合があります。ほとんどの場合、ユーザーグループはユーザーに認可ポリシーを適用する必要があります。場合によっては、ユーザーアカウントのプロビジョニングに、姓や姓などの詳細が必要になることがあります。
IdPとして構成されたNetScalerアプライアンスを使用して、式を使用してOIDCID_Tokenに追加の属性を送信できます。高度なポリシー式は、要件に従ってカスタム属性を送信するために使用されます。Citrix IdPは、属性に対応する式を評価し、最終トークンを計算します。
JSONify
NetScalerアプライアンスは自動的に出力データを生成します。たとえば、数値 (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 式です。
NetScaler Gatewayでのアクティブ-アクティブGSLB展開のサポート
OIDCプロトコルを使用してIDプロバイダー(IdP)として構成されたNetScaler Gatewayは、アクティブ-アクティブGSLB展開をサポートできます。NetScaler Gateway IdPのアクティブ-アクティブGSLB展開では、受信したユーザーログインリクエストを複数の地理的場所に負荷分散できます。
重要
セキュリティを強化するために、CA証明書をSSLサービスにバインドし、SSLサービスで証明書検証を有効にすることをお勧めします。
GSLB セットアップの設定の詳細については、GSLB のセットアップと設定の例を参照してください。