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認証

このセクションでは、NetScalerとStoreFrontを構成して、ユーザーがEntra IDを使用して認証できるようにする方法について説明します。この構成では、ユーザーはハイブリッド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仮想サーバー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認証プロファイルの構成

このセクションでは、NetScaler認証プロファイルを構成する方法について説明します。これは、ゲートウェイVPN仮想サーバーにバインドできます。この構成は、ADCがユーザーを外部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を構成します。

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

    • 有効なコールバック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へのEntra ID SSOの構成

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仮想サービスをバイパスする必要があります。これを実現するには、コンテンツスイッチャーを使用できます。

Diagram showing the request flow using the content switcher

/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/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. Azure Entra IDエンタープライズアプリケーションを構成し、テナントでStoreFrontを更新した場合にのみ、シングルサインオンを有効にしてください。これらの設定なしでSAMLとEntra IDを現在使用しているストアに対してこの設定を有効にすると、FASを使用している場合に既存のシングルサインオンが機能しなくなる可能性があります。
  2. VDAが現在SSOを持っていないSAMLとEntra IDを使用している既存のストアに対してこの設定を有効にすると、起動が遅延したり、Entra ID認証設定に関連するエラーが表示されたりする可能性があります。
OIDC経由のEntra ID認証とVDAへのシングルサインオン