OIDCを介したEntra ID認証とVDAへのシングルサインオン
この記事では、ユーザーがOIDCを介してEntra IDで認証し、Entra参加済みVDAにシングルサインオンできるようにStoreFrontとNetScaler ADCを構成する方法について説明します。
重要:
OIDCを介したEntra ID認証とVDAへのシングルサインオンは現在プレビュー段階です。この機能はサポートなしで提供されており、実稼働環境での使用はまだ推奨されません。
-
前提条件
- NetScaler ADC
- StoreFront 2507 LTSR CU1以降
- 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としてあなたを使用します」と伝えます。
- NetScalerまたはStoreFront認証に使用するEntra IDテナントのAzureポータルにサインインします。
- Microsoft Entra IDリソース > 管理 > アプリ登録に移動し、新規登録を選択します。
- アプリケーションに「NetScaler StoreFront Authentication」などの名前を付けます。
- サポートされているアカウントの種類で、作成するアプリケーションの種類としてこの組織ディレクトリ内のアカウントのみを選択します。
-
リダイレクトURIで、作成するアプリケーションの種類としてWebを選択します。アクセストークンが送信されるURIを入力します。<NetScaler Virtual Server URL>/oauth/loginの形式を使用します。例:
https://netscalerentra.customer.com/oauth/login。
クライアントシークレットの作成
クライアントシークレットを作成するには:
- アプリケーションを登録した後、管理 > 証明書とシークレットに移動します。
- クライアントシークレットを選択し、新しいクライアントシークレットを選択します。 アプリはこれらの資格情報を使用して、IdPと安全に通信し、トークンを要求します。
- シークレットの説明と期間を指定します。
- シークレットを作成したら、セットアッププロセスで後で必要になるため、シークレット値を記録してください。この段階でしか表示されません。

アプリケーションのアクセス許可の構成
アプリのアクセス許可を構成するには:
- 管理 > アプリ登録に移動し、アプリケーションを選択します。
- 管理 > APIのアクセス許可を選択します。
- User.Readのアクセス許可はデフォルトで追加されています。
- openidとprofileを追加します。
- <テナント名>の管理者の同意を付与を選択し、承認します。
Microsoft Entra IDのAPIのアクセス許可における「管理者の同意を付与」とは、管理者が組織内のすべてのユーザーに代わって、アプリケーションが要求されたアクセス許可で特定のリソースまたはAPIにアクセスすることを承認することを意味します。

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

- (オプションの手順)セキュリティを強化するために、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トークンを処理できます。userNameFieldをoidに設定することで、ゲートウェイは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 の構成
-
-
ログインタイプを [ドメイン] に設定します。
-
有効なコールバック URL を指定します。これは StoreFront での Entra ID 認証に必要です。
-
-
Citrix DaaS リソースを集約するストアの場合、リモートアクセス用の Gateway の構成。
-
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 への呼び出しはロードバランサーに転送されます。ロードバランサーはリクエストを StoreFront に転送し、Gateway をバイパスします。コンテンツスイッチャーはトラフィックを 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-->
その他のすべてのトラフィック用のコンテンツスイッチングポリシーの作成
認証のために、その他のすべての 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 の有効化または無効化に関する考慮事項
-
Microsoft Entra シングルサインオンで説明されているすべての構成が完了した後にのみ、Entra ID シングルサインオンを有効にしてください。そうしないと、シングルサインオンが失敗し、ユーザーは起動の遅延やエラーを経験する可能性があります。
-
VDA への Entra ID SSO は、OIDC ベースの認証を使用している場合にのみサポートされます。SAML ではサポートされていません。
-
StoreFront は、同じストアで フェデレーション認証サービス と Entra ID SSO の両方を有効にすることをサポートしていません。