OAuth IdPとしてのNetScaler ADC
NetScalerをOpenID-Connect(OIDC)プロトコルを使用してアイデンティティプロバイダーとして構成できるようになりました。OIDCプロトコルは、NetScalerのアイデンティティ提供機能を強化します。OIDC は、ユーザーパスワードを転送せず、特定の有効期間を持つトークンを使用することで、セキュリティを強化するため、シングルサインオンでエンタープライズワイドホストアプリケーションにアクセスできるようになりました。OpenIDは、アプリやサービスなどの非ブラウザクライアントと統合するようにも設計されています。したがって、OIDC プロトコルは多くの実装で広く採用されています。
注
OIDCプロトコルを使用してOAuth IdPとして動作するには、NetScalerがバージョン12.1以降である必要があります。
NetScaler ADCをOAuth IdPとして持つ利点
- ユーザーが組織全体で 1 つの ID を持つため、複数の認証パスワードを維持するオーバーヘッドを排除します。
- パスワードは ID プロバイダでのみ共有され、アクセスするアプリケーションとは共有されないため、パスワードの堅牢なセキュリティを提供します。
- さまざまなシステムとの広範な相互運用性を提供し、ホストされているアプリケーションがOpenIDを受け入れることを容易にします。
注
このソリューションが機能するには、NetScaler Advanced Edition以上が必要です。
GUIを使用してNetScaler をOAuth IdPとして構成するには
-
認証 OAuth IdP ポリシーを作成します。
- [ **セキュリティ] > [AAA-アプリケーショントラフィック] > [ポリシー] > [認証] > [高度なポリシー] > [OAuth IDP] **[ポリシー] に移動します。
- 「 ポリシー」で、「 追加」をクリックします。
-
「認証 OAuth IDP ポリシーの作成」ページで、次のパラメータの値を設定し、「作成」をクリックします。
- 名前:認証ポリシーの名前。
- アクション:このポリシーに一致するリクエストまたは接続に適用する認証 OAuth IdP プロファイルの名前。詳細な手順については、ステップ 2 を参照してください。
- ログアクション:リクエストがこのポリシーに一致する場合に使用するメッセージログアクションの名前。詳細な手順については、ステップ 3 を参照してください。この情報は入力しなくても構いません。
- 未定義の結果アクション:ポリシー評価の結果が未定義の場合に実行するアクション。未定義のイベントは内部エラー状態を示します。使用可能なアクションは DROP と RESET です。この情報は入力しなくても構いません。
- 式:ポリシーが特定の要求に応答するために使用する高度な表現。ポリシーと式の詳細については、「 ポリシーと式」を参照してください。
-
認証 OAuth IdP アクションを作成します。
- 「認証 OAuth IDP ポリシーの作成」ページで、「アクション」フィールドの「追加」をクリックします。
-
表示される[認証 OAuth IDP プロファイルの作成** ] ページで、次のパラメータの値を設定し、[作成] をクリックします。**
- 名前:新しい OAuth IdP シングルサインオンプロファイルの名前。
- クライアント ID: 認証を要求している依存パーティの固有の ID。最大許容長は 127 文字です。
- クライアントシークレット:認証サーバーで依存パーティを承認するためのユニークなシークレット文字列。最大許容長は 239 文字です。
- リダイレクト URL: OAuth トークンの送信先となる依存パーティの URL エンドポイント。最大許容長は 255 文字です。
- 発行者名:NetScalerからIdPに送信されるリクエストでNetScalerを一意に識別するために使用される名前。最大許容長は 127 文字です。
- 対象者:IdP が送信するトークンのターゲット受信者。これは受信者を表すエンティティ名または URL です。最大許容長は 127 文字です。
- スキュー時間:このオプションは、NetScaler IdPによって送信されたトークンの有効期間を指定します。たとえば、スキュー時間が 10 分に設定されている場合、トークンは (現在の時間から 10 を引いたもの) 分から (現在の時間に 10 を加えたもの) 分まで、合計で 20 分の間有効です。デフォルトの所要時間は 5 分です。
- デフォルト認証グループ:セッションの内部グループリストに追加されたグループ。これは、管理者が nFactor フロー内の依存パーティの設定を決定するのに役立ちます。認証ポリシーの式
AAA.USER.IS_MEMBER_OF("group name")
に使用して、依存パーティ関連の nFactor フローを識別できます。最大許容長は 63 文字です。 - 依存パーティメタデータURL: NetScaler IdPが構成中の依存パーティの詳細を取得できるエンドポイント。メタデータレスポンスには、パーティの公開鍵に依存する
jwks_uri
のエンドポイントが含まれている必要があります。最大許容長は 255 文字です。 - 更新間隔:依存パーティのメタデータが更新される間隔。
- 署名サービス:NetScaler IdPがトークンを送信するときにトークンを暗号化するには、このオプションを選択します。
- 属性:ID トークンに挿入される属性の名前と値のペア。設定形式は
name=value_expr@@@name2=value2_expr@@@
です。この@@@
形式は、名前と値のペアの間の区切り文字として使用されます。 - パスワードを送信:ID トークンで暗号化されたパスワードを送信するには、このオプションを選択します。
- 監査メッセージアクションを作成します。
- 「 認証 OAuth IDP ポリシーの作成 」ページで、「 ログアクション 」フィールドの「 追加 」をクリックします。
- 「 監査メッセージアクションの作成 」ページで、次のパラメータの値を設定し、「 作成」をクリックします。
- 名前:監査メッセージアクションの名前。
- ログレベル:生成されるログメッセージの重要度レベルを指定する監査ログレベル。
- 式:ログメッセージの形式と内容を定義するデフォルトの構文式。
- newnslog にログイン:メッセージを新しい NSLOG サーバーに送信します。
-
認証 OAuth サーバーを作成します。
- [ **セキュリティ] > [AAA-アプリケーショントラフィック] > [ポリシー] > [認証] > [高度なポリシー] > [アクション] > [OAUTH アクション ] に移動し、[追加] をクリックします。**
- 「認証 OAuth サーバーの作成」ページで、必要なパラメーターの値を設定し、「作成」をクリックします。
- OAuth IdP ポリシーを認証 OAuth サーバーにバインドします。
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
をサポートします。認証仮想サーバーが OAuth IdP として構成されている場合、既知の OAuth IdP 検出エンドポイント URL は
https://<netscaler-oauth-idp-fqdn>/oauth/idp/.well-known/openid-configuration
である必要があります。OAuth IdPとして構成されたNetScalerは、OAuth SPに送信される
.well-known-Endpoint
応答に、client_secret_post
、client_secret_jwt
、private_key_jwt
およびclient_secret_basic
トークンエンドポイントの認証方法を表示しません。
OIDC プロトコルでの暗号化されたトークンのサポート
OIDCメカニズムを備えたNetScalerは、暗号化されたトークンと署名されたトークンの送信をサポートするようになりました。NetScalerはJSON Web暗号化仕様を使用して暗号化されたトークンを計算し、暗号化されたトークンのコンパクトなシリアル化のみをサポートします。OpenIDトークンを暗号化するには、NetScalerは依存パーティ(RP)の公開鍵を必要とします。公開鍵は、証明書利用者の既知の設定エンドポイントをポーリングすることで動的に取得されます。
新しい「relyingPartyMetadataURL」オプションが「認証 OAuthidpProfile」プロフィールに導入されました。
CLI を使用して証明書利用者のエンドポイントを設定するには
コマンドプロンプトで入力します:
set authentication OAuthIDPProfile <name> [-relyingPartyMetadataURL <URL>] [-refreshInterval <mins>] [-status < >]
<!--NeedCopy-->
-
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はまず依存パーティの既知のエンドポイントをポーリングして構成を読み取ります。現在、NetScaler「jwks_uri」エンドポイントのみを処理します。
- 応答に「jwks_uri」がない場合、プロファイルのステータスは完了していません。
- 応答に「jwks_uri」が存在する場合、NetScalerはそのエンドポイントもポーリングして依存パーティの公開鍵を読み取ります。
注:
トークン暗号化では、RSAES-OAEP および AES256 GCM 暗号化タイプのアルゴリズムのみがサポートされています。
OpenID コネクトでのカスタム属性のサポート
OpenID
証明書利用者は、ユーザープロファイルの作成や承認の決定を行うために、トークンに 1 つ以上のユーザー名またはユーザープリンシパル名 (UPN) を要求する場合があります。ほとんどの場合、ユーザーグループはユーザーに認可ポリシーを適用する必要があります。場合によっては、ユーザーアカウントのプロビジョニングに、姓や姓などの詳細が必要になることがあります。
IdPとして構成されたNetScalerを使用すると、式を使用してOIDCid_Tokenに追加の属性を送信できます。高度なポリシー式は、要件に従ってカスタム属性を送信するために使用されます。NetScaler IdPは、属性に対応する式を評価し、最終的なトークンを計算します。
NetScalerは出力データに自動的に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 トークンに挿入される属性の名前を表すリテラル文字列です。
注:
次の例では、
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プロトコルを使用してIDプロバイダー(IdP)として構成されたNetScaler Gatewayは、アクティブ-アクティブGSLB展開をサポートできます。NetScaler Gateway IdPのアクティブ-アクティブGSLB展開では、受信したユーザーログインリクエストを複数の地理的場所に負荷分散できます。
重要
セキュリティを強化するために、CA 証明書を SSL サービスにバインドし、SSL サービスで証明書検証を有効にすることをお勧めします。 GSLB セットアップの設定の詳細については、「GSLB セットアップと設定の例」を参照してください。