StoreFront

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

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

重要:

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

  • 前提条件

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

OIDC を使用した Entra ID 認証

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

Microsoft Azure Entra 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. リダイレクト URI で、作成するアプリケーションの種類として Web を選択します。アクセストークンが送信される URI を入力します。フォーマットは <NetScaler Virtual Server URL>/oauth/login を使用します。例: https://netscalerentra.customer.com/oauth/login

    Azure ID

クライアントシークレットの作成

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

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

Azure NetScaler

アプリケーション権限の構成

アプリの権限を構成するには:

  1. 管理 > アプリの登録 に移動し、アプリケーションを選択します
  2. 管理 > API のアクセス許可 を選択します
  3. User.Read 権限はデフォルトで追加されています
  4. openidprofile を追加します
  5. <テナント名> の管理者の同意を付与 を選択し、承認します

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

Azure grant permission

XML 信頼を有効にするための Citrix DaaS の構成

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

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

    Azure grant permission

  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
<!--NeedCopy-->

OAuth ポリシーとアクションの作成

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

前の手順で取得したクライアント ID とクライアントシークレットが必要です。

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

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

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 仮想サーバーの作成と認証プロファイルのバインド

NetScaler Gateway と 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 に渡す必要があります。デフォルトでは、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-->

StoreFront 内での Citrix Gateway の構成

  1. StoreFront での NetScaler Gateway インスタンスの追加

  2. Citrix Gateway の構成

    • ログインの種類を Domain に設定します。

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

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

  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 への Entra ID SSO の構成

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

NetScaler ADC コンテンツスイッチングの構成

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

コンテンツスイッチャーを使用した要求フローを示す図

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

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

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

StoreFront サーバーグループの前面にあり、Gateway と同じマシンで実行されているロードバランサー仮想サーバーがすでに存在する場合、この手順をスキップし、コンテンツスイッチを構成してその仮想サーバーに直接トラフィックを送信できます。そうでない場合は、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 トラフィックをリッスンし、要求を Gateway 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/StoreEntraWeb/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/StoreEntraWeb/Tickets/RedeemStoreTicket\")" -action cs_lb_vs
bind cs vserver cs_vs -policyName cs_lb_vs_pol -priority 100
<!--NeedCopy-->

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

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

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 シングルサインオン で説明されているすべての構成が完了した後にのみ、Entra ID シングルサインオンを有効にしてください。そうしないと、シングルサインオンが失敗し、ユーザーは起動の遅延やエラーを経験する可能性があります。

  2. VDA への Entra ID SSO は、OIDC ベースの認証を使用している場合にのみサポートされます。SAML ではサポートされていません。

  3. StoreFront は、同じストアで フェデレーション認証サービス と Entra ID SSO の両方を有効にすることをサポートしていません。

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