StoreFront

OIDC を介した Entra ID 認証と VDA へのシングルサインオン

この記事では、ユーザーが OIDC を介して Entra ID で認証し、Entra に参加している VDA にシングルサインオンできるように StoreFront と NetScaler ADC を構成する方法について説明します。

重要:

OIDC を介した Entra ID 認証と VDA へのシングルサインオンは現在プレビュー段階です。この機能はサポートなしで提供されており、本番環境での使用はまだ推奨されません。

前提条件

  • ネットスケーラー ADC
  • ストアフロント 2507 LTSR CU1 以降
  • モダンエクスペリエンス
  • Microsoft Entra ID と、以下のいずれかの権限を持つアカウント:
    • クラウドアプリケーション管理者
    • アプリケーション管理者
    • グローバル管理者
  • コネクタ付きの DaaS サブスクリプション。これは CVAD では利用できません。
  • 公開されたデスクトップおよび/またはアプリ
  • Web ブラウザから Citrix Workspace アプリへの起動で VDA への SSO を有効にするには、Citrix Web 拡張機能が必要です。

既知の問題と制限事項

  • Entra ID認証を使用するストアでFederated Authentication Serviceを有効にすることはサポートされておらず、起動の失敗につながる可能性があります。
  • ストアにCitrix Virtual Apps and Desktopsサイトが含まれており、ユーザーがOIDC経由でEntra IDを使用して認証する場合、StoreFrontはそのサイトからリソースを列挙しません。[WSP-30880]
  • VDAへのEntra ID SSOは、OIDCベースの認証を使用している場合にのみサポートされます。SAMLではサポートされていません。
  • ユーザーが多数のEntraグループに属している場合、StoreFrontは大量のRAMを使用します。[WSP-29276]

OIDC を使用した エントラ ID 認証

このセクションでは、ユーザーがEntra IDを使用して認証できるようにNetScalerとStoreFrontを構成する方法について説明します。この構成では、ユーザーはハイブリッドIDを持つことも、Active DirectoryアカウントなしでEntraのみのIDを持つこともできます。

Microsoft Azure エントラ ID アプリケーションを作成する

Microsoft Entra IDのアプリ登録は、Entra IDがアプリケーションを認識するように定義します。この場合、NetScaler OIDCです。この登録は、アプリケーションの認証および承認要求も管理します。OAuthは、ユーザーを認証してトークンを発行するために信頼できるIDプロバイダー (IdP) を必要とするため、アプリを登録すると、Entra IDに「このアプリケーションはOAuthフローのIdPとしてあなたを使用します」と伝えます。

  1. NetScalerまたはStoreFront認証に使用するEntra IDテナントのAzureポータルにサインインします。
  2. Microsoft Entra ID リソース > 管理 > アプリの登録 に移動し、新規登録 を選択します。
  3. アプリケーションに名前を付けます。例えば、NetScaler StoreFront Authentication などです。
  4. サポートされているアカウントの種類」で、「この組織ディレクトリ内のアカウントのみ」を選択します。
  5. Redirect URI で、作成するアプリケーションの種類として Web を選択します。アクセストークンが送信されるURIを入力します。<NetScaler Virtual Server URL>/oauth/login の形式を使用します(例: https://netscalerentra.customer.com/oauth/login)。

    アジュール ID

クライアントシークレットを作成する

クライアントシークレットを作成するには:

  1. アプリケーションを登録した後、管理 > 証明書とシークレットに移動します。
  2. クライアントシークレットを選択し、新しいクライアントシークレットを選択します。 アプリはこれらの資格情報を使用して、IdPと安全に通信し、トークンを要求します。
  3. シークレットの説明と期間を指定します。
  4. シークレットを作成したら、その値を記録してください。セットアッププロセスで後で必要になり、作成のこの段階でのみ表示されるためです。

アジュール ネットスケーラー

アプリケーションのアクセス許可を構成する

アプリのアクセス許可を構成するには:

  1. 管理 > アプリの登録に移動し、アプリケーションを選択します。
  2. 管理 > APIのアクセス許可を選択します。
  3. User.Readのアクセス許可は、デフォルトで既に追加されています。
  4. オープンIDプロファイル を追加します。
  5. <tenant name> の管理者同意を付与」を選択し、承諾します。

Microsoft Entra IDのAPIアクセス許可における「管理者の同意を付与」とは、管理者が組織内のすべてのユーザーに代わって、アプリケーションが要求されたアクセス許可で特定のリソースまたはAPIにアクセスすることを承認することを意味します。

Azure のアクセス許可の付与(/ja-jp/storefront/2507-ltsr/media/integrate-with-citrix-gateway-and-citrix-adc/azure-grant-permission.png)

XML 信頼を有効にするように Citrix DaaS を構成する

デフォルトでは、Citrix DaaS はユーザーの Active Directory 資格情報を使用して要求を認証します。Entra ID 認証では、StoreFront は資格情報を持っていません。そのため、認証を要求せずに StoreFront を信頼するように DaaS を構成する必要があります。代わりに、サービスレベルの認証を提供するためにセキュリティキーを有効にすることを強くお勧めします。

  1. Citrix Cloud にサインインし、DaaS コンソールに移動します。
  2. 設定に移動します。
  3. XML 信頼をオンにします。

    Azure のアクセス許可の付与(/ja-jp/storefront/2507-ltsr/media/integrate-with-citrix-gateway-and-citrix-adc/azure-xml-trust.png)

  4. (オプションの手順) セキュリティを強化するために、DaaS と StoreFront の間でセキュリティキーを有効にすることができます。詳細については、Citrix DaaS™ ドキュメントの「セキュリティキーの管理」を参照してください。

NetScaler 認証プロファイルを構成する

このセクションでは、ゲートウェイ VPN 仮想サーバーにバインドできる NetScaler 認証プロファイルを構成する方法について説明します。この構成は、サインインのためにユーザーを外部 OAuth IdP (Microsoft Entra ID など) にリダイレクトする方法と、認証後に受信した OAuth トークンを処理する方法を ADC に指示します。エンドポイント、クライアント資格情報、スコープ、および ADC がトークンからユーザー情報を抽出する方法を指定します。

前の手順で取得したクライアントシークレットと、Microsoft Entra ID 認証エンドポイントが必要です。認証エンドポイントは、Azure ポータルでアプリ登録の概要に移動し、エンドポイントタブをクリックすると見つけることができます。

認証仮想サーバーを作成する

認証仮想サーバーはユーザー認証を処理します。

add authentication vserver EntraId_Authentication_VirtualServer SSL 0.0.0.0 443 \
  -state ENABLED \
  -authentication ON \
  -td 0 -appflowLog ENABLED \
  -noDefaultBindings NO
bind ssl vserver EntraId_Authentication_VirtualServer \
  -certkeyName <Certificate Key Name>
<!--NeedCopy-->

OAuth ポリシーとアクションを作成する

OAuth アクションは、NetScaler ADC が Microsoft Entra ID などの OAuth IdP とどのようにやり取りするかを指定します。このアクションにより、Citrix Gateway はユーザーをサインインのために IdP にリダイレクトし、返された OAuth トークンを処理できます。これにより、ゲートウェイが StoreFront に認証する際に OID をユーザー名として渡すように userNameFieldoid に設定されます。StoreFront は、OID が Entra ID アクセストークンを検索して取得した詳細と一致することを検証します。一致しない場合、認証は失敗します。

前の手順で取得したClient IDとClient secretが必要です。

add authentication OAuthAction EntraId_Oauth_Server \
  -authorizationEndpoint "https://login.microsoftonline.com/<TenantId>/oauth2/v2.0/authorize\?prompt=login" \
  -tokenEndpoint "https://login.microsoftonline.com/<TenantId>/oauth2/v2.0/token" \
  -clientID <ClientId> \
  -clientSecret <ClientSecret> \
  -Attribute1 email \
  -Attribute2 family_name \
  -Attribute3 given_name \
  -Attribute4 upn \
  -CertEndpoint "https://login.microsoftonline.com/<TenantId>/discovery/v2.0/keys" \
  -userNameField oid \
  -allowedAlgorithms HS256 RS256 RS512 \
  -PKCE ENABLED \
  -tokenEndpointAuthMethod client_secret_post \
  -OAuthType GENERIC \
  -grantType CODE \
  -refreshInterval 1440
add authentication Policy EntraId_Authentication_Policy \
  -rule true \
  -action EntraId_Oauth_Server
<!--NeedCopy-->

authorizationEndpointには、NetScalerを介してStoreFrontにアクセスしようとするとユーザーが再認証を強制されるように、クエリ文字列パラメーターprompt=loginが含まれています。

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

bind authentication vserver EntraId_Authentication_VirtualServer \
  -policy EntraId_Authentication_Policy \
  -priority 100 \
  -gotoPriorityExpression END
<!--NeedCopy-->

認証プロファイルを作成する

add authentication authnProfile EntraId_Auth_Profile \
  -authnVsName EntraId_Authentication_VirtualServer \
  -AuthenticationLevel 0
<!--NeedCopy-->

VPN仮想サーバーを作成し、認証プロファイルをバインドする

Integrate NetScaler Gateway with StoreFrontのステップ1、2、4を、前の手順で作成した認証プロファイルを使用して完了します。

または、すでに適切なCitrix Gatewayがある場合は、新しい認証プロファイルをそれにバインドできます。このコマンドを実行すると、既存の認証プロファイルが置き換えられます。

set vpn vserver <StoreFront ICA Proxy vServer> \
  -authentication ON \
  -authnProfile EntraId_Auth_Profile
<!--NeedCopy-->

StoreFrontへのSSOのためのEntra IDトークンインジェクション構成

Citrix Gatewayがユーザーを認証した後、StoreFrontがユーザーが認証されていることを検証し、グループメンバーシップを検索できるように、十分な情報をStoreFrontに渡す必要があります。デフォルトでは、Citrix GatewayはActive Directoryのユーザー名とパスワードのみを送信します。Entra ID認証の場合、StoreFrontがMicrosoft Graph APIを使用してユーザー情報を検索できるように、Entra IDアクセストークンを渡す必要があります。これを実現するには、StoreFrontへのユーザー認証呼び出しにEntra IDトークンを追加する書き換えポリシーを追加する必要があります。書き換えEntra IDアクセストークンポリシーが有効にならない場合、ログインは失敗します。書き換えポリシー機能がデフォルトで無効になっている場合、またはまだ有効になっていない場合は、まず有効にする必要があります。

enable ns feature Rewrite
add rewrite action EntraId_Oauth_Insert_AccessToken_Header insert_http_header X-Citrix-OIDC-Access-Token "AAA.USER.ATTRIBUTE(\"accesstoken\")" \
  -comment "A rewrite policy to add the OAUTH access_token to subsequent user authentication requests"
add rewrite policy EntraId_Oauth_Insert_AccessToken_Policy "HTTP.REQ.URL.TO_LOWER.ENDSWITH(\"gatewayauth/login\") || HTTP.REQ.URL.TO_LOWER.ENDSWITH(\"citrixagbasic/authenticate\")" EntraId_Oauth_Insert_AccessToken_Header \
  -comment "A rewrite policy to add the OAUTH access_token to subsequent user authentication requests"
bind vpn vserver <StoreFront ICA Proxy vServer> \
  -policy EntraId_Oauth_Insert_AccessToken_Policy \
  -priority 100 \
  -gotoPriorityExpression END \
  -type REQUEST
<!--NeedCopy-->

ストアフロント内でのシトリックス ゲートウェイの構成

  1. StoreFront上に、NetScaler Gatewayのインスタンスを新規に設定し、追加する手順です(https://docs.netscaler.com/ja-jp/netscaler-gateway/current-release/integrate-citrix-gateway-with-citrix-products/integrate-citrix-gateway-with-storefront.html#5-add-a-netscaler-gateway-instance-on-storefront)。

  2. Citrix Gatewayの設定作業を実施します(/ja-jp/storefront/2507-ltsr/integrate-with-citrix-gateway-and-citrix-adc/configure-citrix-gateway)。

    • ログインタイプをドメインに設定します。

    • 有効なコールバックURLを指定します。これは、StoreFrontでのEntra ID認証に必要です。

  3. Citrix DaaSリソースを集約するストアの場合、リモートアクセス用にゲートウェイを構成する

  4. NetScaler Gateway から Entra ID 認証を有効にして構成します。以下の PowerShell を実行し、テナント ID を Entra ID テナントの ID に、/Citrix/EntraStore をストアパスに置き換えます。

  $store = Get-STFStoreService /Citrix/EntraStore
  $authenticationService = Get-STFAuthenticationService -Store $store
  Set-STFEntraIdSettings -AuthenticationService $authenticationService -TenantId "<Your tenant id>" -Enabled $true
  <!--NeedCopy-->

VDA へのエントラ ID シングルサインオンを構成する

StoreFront と Citrix Gateway を Entra ID を使用してユーザーを認証するように構成したら、FAS を必要とせずに VDA への Entra ID SSO を有効にできます。これは、DaaS の構成が完了した後にのみ有効にしてください。詳細については、Microsoft Entra シングルサインオン を参照してください。これには、StoreFront と NetScaler ADC に対して以下の追加構成が必要です。

NetScaler ADC コンテンツスイッチングを構成する

通常、StoreFront へのすべてのリクエストはゲートウェイ VServer を経由するため、認証が必要です。ユーザーが Entra ID に参加している VDA を起動すると、Citrix Workspace アプリは再度 Azure に認証し(Entra ID セッションがまだ有効な場合は SSO)、アクセストークンを取得する必要があります。このフローの一部として、StoreFront は Citrix Cloud で実行されているサービスによって検証される必要があるトークンを生成します。このサービスは、トークンを検証するために StoreFront エンドポイント /Citrix/<StoreWeb>/Tickets/RedeemStoreTicket にコールバックできる必要があります。このサービスは NetScaler セッションにアクセスできないため、チケットを交換するための呼び出しでは VPN 仮想サービスをバイパスする必要があります。これを実現するには、コンテンツスイッチャーを使用できます。

コンテンツスイッチャーを使用したリクエストフローを示す図 (/ja-jp/storefront/2507-ltsr/media/integrate-with-citrix-gateway-and-citrix-adc/azure-chart.png)

/Citrix/<StoreWeb>/Tickets/RedeemStoreTicket への呼び出しはロードバランサーに転送され、ロードバランサーはゲートウェイをバイパスして StoreFront にリクエストを転送します。コンテンツスイッチャーはトラフィックを直接 URL に転送するように構成できず、ターゲットとして仮想サーバーを必要とするため、ロードバランサーが必要です。ロードバランサーはロードバランシングを実行せず、単にトラフィックを StoreFront に転送します。同じマシンに適切な StoreFront ロードバランサーがすでに存在する場合は、代わりにそれを使用できます。

その他のすべての呼び出しは、ゲートウェイの VPN 仮想サーバーに転送されます。

コンテンツスイッチャーから StoreFront へのパススルー用ロードバランサーを作成する

StoreFront サーバーグループの前面にあり、ゲートウェイと同じマシンで実行されているロードバランサー仮想サーバーがすでに存在する場合は、この手順をスキップし、コンテンツスイッチを構成してその仮想サーバーに直接トラフィックを送信できます。そうでない場合は、StoreFront サーバーにトラフィックをパススルーするためのロードバランサーを作成する必要があります。これは、コンテンツスイッチャーのアクションが仮想サーバーを参照する必要があるためです。

手順は、StoreFront が HTTPS (推奨) または HTTP のどちらで構成されているかによって若干異なります。

StoreFront が HTTPS 用に構成されている場合

StoreFront を表すサービス stf_srv をその IP アドレスを使用して作成し、永続性のない SSL ロードバランサーにバインドします。

add service stf_srv <StoreFront Ip Address> SSL 443
add lb vserver lb_vs SSL <lb_vs Ip Address> 443 -persistenceType NONE -cltTimeout 180
bind lb vserver lb_vs stf_srv
<!--NeedCopy-->
StoreFront が HTTP 用に構成されている場合

StoreFront を表すサービス stf_srv をその FQDN を使用して作成し、永続性のない HTTP ロードバランサーにバインドします。

add server storefront1 <storefront fqdn>
add service stf_srv storefront1 HTTP 80
add lb vserver lb_vs HTTP 0.0.0.0 0 -persistenceType NONE -cltTimeout 180
bind lb vserver lb_vs stf_srv
<!--NeedCopy-->

SSLコンテンツスイッチング仮想サーバーを作成する

クライアント要求を処理するためのSSLコンテンツスイッチング仮想サーバーを作成します。このコンテンツスイッチング仮想サーバーは、ポート443でHTTPSトラフィックをリッスンし、ゲートウェイVPN仮想サーバーに要求をルーティングするか、ロードバランサー経由でStoreFrontにパススルーします。

デフォルトではコンテンツスイッチングは無効になっているため、以前に有効にしていない場合は有効にする必要があります。

enable feature CS
add cs vserver cs_vs SSL <cs_vs Ip Address> 443 -cltTimeout 180 -persistenceType NONE
bind ssl vserver cs_vs -certkeyName <Certificate Name>
<!--NeedCopy-->

チケット引き換え用のコンテンツスイッチングポリシーを作成する

StoreFrontチケット引き換えパスを含むURLに基づいて、負荷分散用のコンテンツスイッチングポリシーを作成します。

このポリシーは、URLに/Citrix/<StoreWeb>/Tickets/RedeemStoreTicketが含まれる場合に要求を照合し、VPN仮想サーバーを経由せずにロードバランサーにルーティングします。

StoreEntraWebをStoreFront仮想サーバーWebポリシーのStoreFront Webサイト名に置き換えます。以前の手順で作成したロードバランサーlb_vsを使用するか、StoreFrontサーバーの前面にある既存のロードバランサー仮想サーバーを使用できます。

add cs action cs_lb_vs -targetLBVserver lb_vs
add cs policy cs_lb_vs_pol -rule "HTTP.REQ.URL.CONTAINS(\"/Citrix/<StoreWeb>/Tickets/RedeemStoreTicket\")" -action cs_lb_vs
bind cs vserver cs_vs -policyName cs_lb_vs_pol -priority 100
<!--NeedCopy-->

その他のすべてのトラフィック用のコンテンツスイッチングポリシーを作成する

認証のために、他のすべてのStoreFrontトラフィックをVPN仮想サーバー経由で送信するキャッチオールコンテンツスイッチングポリシーを作成します。

add cs action cs_vpn_vs -targetVserver <VPN vServer>
add cs policy cs_vpn_pol -rule TRUE -action cs_vpn_vs
bind cs vserver cs_vs -policyName cs_vpn_pol -priority 110
<!--NeedCopy-->

VDA Entra IDシングルサインオンを構成する

シングルサインオンにより、ユーザーはCitrix Gatewayにサインインする際に一度認証するだけで、VDAに資格情報を再入力することなく、仮想デスクトップやアプリケーションにアクセスできるようになります。

$store = Get-STFStoreService /Citrix/EntraStore
Set-STFStoreLaunchOptions -StoreService $store -EntraIdSsoEnabled $true
<!--NeedCopy-->

Entra ID SSOを有効または無効にする際の考慮事項

  1. Microsoft Entra single sign-onで説明されているすべての構成が完了してから、Entra IDシングルサインオンを有効にしてください。そうしないと、シングルサインオンが失敗し、ユーザーは起動の遅延やエラーを経験する可能性があります。
OIDC を介した Entra ID 認証と VDA へのシングルサインオン