OpenID Connect 認証
OpenID Connect(OIDC)は、GO-GlobalがホストするWindowsアプリケーションへのアクセスを効率化しつつ、組織がユーザーを認証するための最新かつ安全な方法を提供します。Okta、Azure AD、ADFSなどのIDプロバイダーと連携することで、管理者は認証を一元化し、ユーザーがローカルWindowsアカウント、ドメインアカウント、あるいはその両方でサインインする場合でも、サインイン体験を向上させることができます。 このガイドでは、GO-GlobalでOIDC認証を有効にする方法、Windowsの自動サインインを設定する方法、IDプロバイダーのアカウントをActive Directoryユーザーと紐付ける方法、およびシームレスなアクセスに必要な追加設定を管理する方法について説明します。また、ユーザー名フィールドのカスタマイズ、ローカルアカウントの作成処理、権限の設定、およびプログラムによるOIDCトークンの取得といった高度なオプションについても解説します。
ユーザーがOIDC経由で認証を完了すると、GO-Globalは管理者に対し、Windows上でユーザーを自動的に認証するためのいくつかのオプションを提供します。例えば、IDプロバイダーが組織のActive Directoryと統合されている場合、GO-Globalはユーザーをそのドメインアカウントに自動的にサインインさせることができます。あるいは、Active Directoryとの統合が必要ない、または希望しない場合、GO-Globalはユーザー用のローカルWindowsアカウントを作成し、そのアカウントに自動的にサインインさせることができます。 シングルサインオン(SSO)のサポートは追加オプションです。この機能を購入していない場合、OpenID Connect 認証はグレー表示(無効)になります。
OpenID Connect 認証を有効にするには
- ツール | ホストオプションをクリックします。
- [認証] タブをクリックします。
- OpenID Connect 認証を有効にします。
- 以下のオプションから1つ、またはどちらも選択しないでください:
- ユーザーをローカルのWindowsアカウントに自動的にサインインさせます。この機能を有効にすると、GO-Globalはドメインアカウントを持たないユーザーに対して、自動的にローカルユーザーアカウントを作成します。
- ユーザーをドメインアカウントに自動的にサインインさせる。 この機能が有効になっている場合、GO-Global は、OpenID Connect ログインが成功した後に OIDC アイデンティティプロバイダーから取得したユーザーの UPN を使用して、S4U ログインを試行します。S4U ログインを有効にするだけで、ユーザーは GO-Global ホスト上のリソースにアクセスできるようになりますが、ネットワーク上で実行されているサービスへの認証は行えません。ネットワーク上で実行されているサービスにアクセスするには、管理者は制約付き委任を有効にする必要があります( 委任機能のサポートに必要な構成要件 記事)または 「ホストにパスワードをキャッシュする」オプション.
- GO-Global でホストされているアプリケーションが、GO-Global ホスト上のローカルアカウントで実行可能な場合は、「ユーザーをローカル Windows アカウントに自動的にサインインする」を選択する必要があります。一方、アプリケーションが Active Directory で管理されているリソースへのアクセスを必要とする場合は、「ユーザーをドメインアカウントに自動的にサインインする」を選択する必要があります。後者の場合、ID プロバイダーは Active Directory と統合されており、GO-Global にユーザーの UPN を提供できる必要があります。
- 「ユーザーをローカル Windows アカウントに自動的にサインインさせる」も「 ユーザーをドメイン アカウントに自動的にサインインさせる 」も 選択されていない場合、ユーザーには「認証」タブの他のオプションで指定された方法に従って Windows へのサインインが求められます。たとえば、OpenID Connect 認証と 標準認証の両方が有効になっている場合、ユーザーには 2 回サインインするよう求められます。 まず、OpenID Connect ID プロバイダーへのサインインが求められます。その後、OpenID Connect ID プロバイダーでの認証が成功すると、Windows アカウントのユーザー名とパスワードの入力が求められます。
- GO-Global でホストされているアプリケーションが、GO-Global ホスト上のローカルアカウントで実行可能な場合は、「ユーザーをローカル Windows アカウントに自動的にサインインする」を選択する必要があります。一方、アプリケーションが Active Directory で管理されているリソースへのアクセスを必要とする場合は、「ユーザーをドメインアカウントに自動的にサインインする」を選択する必要があります。後者の場合、ID プロバイダーは Active Directory と統合されており、GO-Global にユーザーの UPN を提供できる必要があります。
- OpenID Connect サーバーの設定にあるクライアント ID の文字列を、「クライアント ID」ボックス に入力してください。
- OpenID Connect サーバーの設定にある「クライアントシークレット」の文字列を、「クライアントシークレット」ボックス に入力してください。
- 「Authorize URL」ボックスに、OpenID Connect サーバーでユーザーを認証するために使用する認証 URL を入力してください。
- 「Token URL」ボックスに、OpenID Connect サーバーでのユーザー認証に使用するトークン URL を入力してください。
- [リダイレクト URL] ボックスに、ユーザーが認証に成功した後、ID プロバイダーがユーザーを GO-Global Host にリダイレクトするために使用する URL を入力します。この URL は、ユーザーが GO-Global Host にアクセスする際に使用するベース URL の末尾に callback.html を付加したものと同じである必要があります。 たとえば、IIS などの別の Web サーバーを使用しており、TLS が有効になっていない場合、コールバック URL は http://hostname/goglobal/callback.html となります。 一方、GO-Globalの統合Webサーバーを使用しており、TLSが有効になっておらず、GO-Globalがデフォルトポートである491での接続を受け入れるように設定されている場合、コールバックURLは http://hostname:491/callback.html となります。
- [OK]をクリックしてください。
Active Directory ユーザーと ID プロバイダーのアカウントの照合
GO-Globalでは、OIDC IDトークン内のクレームからユーザーのUPNを導出するためのいくつかのオプションを提供しています。ユーザーアカウントは、Active Directory(AD)とIDプロバイダーの間で、以下の3つの方法のいずれかで一致している必要があります。
これを実現するには、3つの方法があります:
- ユーザーのネイティブのユーザープリンシパル名(UPN)は、すでに というIDプロバイダーのユーザー名と一致しています。たとえば、ローカルADドメインがexample.comで、IDプロバイダーのドメインもexample.comである場合です。デフォルトでは、GO-GlobalはIDトークンのemail、UPN、sub、useridフィールドの順に、有効なUPNを検索します。 あるいは、管理者は HostProperties.xml 内のOpenIDConnectUserNameField プロパティ を使用して、UPN を含むクレームを指定することもできます。
- UPNサフィックスを追加し、それをADのユーザー名として使用することで、ADのUPNとIDプロバイダーのUPNを一致させます。たとえば、ローカルADドメインが「company.local」の場合、ユーザーには「example.com」というUPNサフィックスを追加します。IDプロバイダーのドメインも「example.com」です。
- ユーザーの AD メール属性を ID プロバイダーの UPN と一致するように設定し、HostProperties.xml の設定を変更します。一部の展開環境では、ID トークン内にユーザーの AD UPN と一致するクレームが存在しない場合があります。 たとえば、顧客のIDプロバイダーが使用されるホスティング環境では、顧客のドメイン(例:customercompany.com)はホスティング環境のADドメイン(例:hostedapp.com)と一致しません。顧客のIDプロバイダーが使用されるため、ホスティング環境の管理者は、ユーザーのOIDC IDトークンにAD UPNを指定するクレームを追加することができません。
このような状況では、管理者は GO-Global を設定して、ユーザーのメールアドレスを介してユーザーの AD UPN を検索するようにすることができます。これを行うには、対象となるすべてのホストの HostProperties.xml ファイル内で、OpenIDConnectUserLookupByEmail プロパティの値を true に設定します。このプロパティが true に設定されると、GO-Global は Active Directory を検索し、OIDC ID トークンのメールアドレスクレームと一致するメール属性を持つユーザーアカウントを探します。
ユーザー名を別のフィールドに保存する
デフォルトでは、GO-Global は、ユーザーの OpenID Connect ID トークン内で ID プロバイダーによって指定されたユーザープリンシパル名(UPN)またはメールアドレスから Windows ユーザー名を取得します。ただし、ID プロバイダーがユーザーの Windows ユーザー名を別のフィールドに保存するように設定されている場合、管理者は HostProperties.xml ファイル内のOpenIDConnectUserNameFieldプロパティにそのフィールド名を入力することで、GO-Global がその別のフィールドを使用するように設定できます。
OpenIDConnectUserNameField プロパティを設定するには
- アプリケーション公開サービスを停止してください。
- テキストエディタで %PROGRAMDATA%\GraphOn\GO-Global\HostProperties.xml を開きます。
- 「OpenIDConnectUserNameField」プロパティを探し、その値を、GO-GlobalがWindows上でユーザーを認証する際に使用するべきユーザープリンシパル名(UPN)を含む、ユーザーのOpenID Connectトークン内のクレーム名に変更してください。
- HostProperties.xml ファイルを保存します。
- アプリケーション公開サービスを再起動してください。
「ユーザーをローカル Windows アカウントに自動的にサインインする」が有効になっている場合、ローカルユーザーアカウント名は、OpenID Connect 認証から取得したユーザープリンシパル名(UPN)またはメールアドレスから生成されます。ローカルアカウント名には「@」や「.」を含めることができないため、これらはそれぞれ「_」および「-」に置き換えられます。例えば、メールアドレスsales@graphon.comは、sales_graphon-com として生成されます。
注:Windowsでは 、ローカルアカウント名の文字数に20文字の制限があります。生成されたアカウント名が20文字を超える場合、GO-Globalはその名前を20文字に切り詰めます
これらのアカウントのパスワードは、小文字、大文字、数字、および!@#$%& といった特殊文字 からランダムに選択された文字で構成されます。GO-Global が生成するパスワードの長さは、そのコンピュータでユーザーに対して指定されているパスワードの最小長と同じになります。ただし、最小長が 7 文字未満の場合は例外です。その場合、GO-Global は、最小長要件より 14 文字長いパスワードを生成します。 たとえば、コンピューターのパスワードの最小長が 6 文字の場合、GO-Global は 20 文字のパスワードを、次のような形式で生成します:8tw@m4b9Dek#vR76@t6%。GO-Global がコンピューターのパスワードの最小長を取得できない場合、14 文字のパスワードを生成します。
最小長さの要件がグループポリシーで設定されている場合は、[ホストオプション] ダイアログの [セッション開始] タブでグループポリシーを有効にしてください。これらのパスワードは保存も再利用もされません。パスワードは、OpenID Connect 認証が行われるたびに変更されます。
GO-Global セッションでホストされる Windows アプリケーションのアクセス許可は、Okta や ADFS などの ID プロバイダーによって管理されるものではありません。これらは Windows または Active Directory で管理されます。
Active Directory との統合は、ID プロバイダーの機能です。 Active Directory Federated Services (ADFS) は、Active Directory と自動的に統合されます。その他の ID プロバイダーは、独自の統合機能を提供しています。ID プロバイダーを利用している組織では、すでにこの設定が完了しているはずです。設定をこれから行う組織は、設定方法について ID プロバイダーのドキュメントを参照する必要があります。
Oktaの詳細については、https://help.okta.com/en/prod/Content/Topics/Directory/ad-agent-main.htm をご覧ください。
Azureを使用する場合は、必ずOAuth 2.0認証エンドポイント(v1)およびOAuth 2.0トークンエンドポイント(v1)のURLを使用してください。 v2 エンドポイントの URL は機能しません。
ADFS を使用する場合は、OIDC アプリケーションの作成時に [サーバー アプリケーション] を選択してください。
標準ユーザーに「起動」および「COMの有効化」の権限を付与する
デフォルトでは、Windowsでは、ユーザー名とパスワードを入力して対話的にサインインしていない標準ユーザーに対して、COMオブジェクトを起動およびアクティブ化する権限は付与されません。その結果、OpenID Connect認証が使用されている場合、COMインターフェースに依存するWindowsエクスプローラーなどのアプリケーションは、「Administrators」グループのメンバーであるユーザーに対してのみ正常に実行または動作する可能性があります。したがって、OIDC認証が有効になっている場合は、以下の手順に従って標準ユーザーにCOMオブジェクトの「起動」および「アクティブ化」権限を付与してください。
- dcomcnfg を実行してください。
- 「コンポーネント サービス」→「コンピュータ」→「マイ コンピュータ」の順に選択します。
- 「マイ コンピュータ」を右クリックし、「プロパティ」をクリックします。
- [COM セキュリティ] タブを選択します。
- 「起動とアクティベーションの権限」の下にある「既定の設定を編集...」ボタンを クリックします。
- 「追加」ボタンを クリックしてください。(注: デフォルトの権限設定では、INTERACTIVE グループおよび Administrators グループに完全な権限が付与されています。そのため、OIDC を使用する場合、ユーザー名とパスワードで認証されたすべてのユーザー(INTERACTIVE ユーザー)および Administrators グループのメンバーに対して、この機能が動作します。
- 「ドメインユーザー」グループを追加します。
- 「ローカル起動」と「ローカルアクティベーション」の横にある「許可」チェックボックス をクリックします。
- [OK]をクリックしてください。
- [OK]をクリックしてください。
プログラムによるOIDC IDトークンおよびアクセストークンの取得
GO-Globalセッションで実行されているアプリケーションにおいて、ユーザーが認証された際にIDプロバイダーから提供されるOIDC IDトークンやアクセストークン内のクレームを取得したり、それらにアクセスしたりできると便利な場合があります。このような必要がある場合、アプリケーション開発者は、これらのトークンを取得するためのコードをアプリケーションに追加することができます。
プログラムでOIDC IDトークンとアクセストークンを取得するには、以下の処理が必要です:
- GetModuleHandle() を呼び出して、redirector.dll のハンドルを取得する
- 「GetOpenIDConnectIDToken」および「GetOpenIDConnectAccessToken」に対してGetProcAddress()を呼び出し、2つのエクスポートされた関数のプロシージャアドレスを取得する
- 必要なcharバッファの長さを取得するために、パラメータとして0とNULLを指定して、これら2つのプロシージャを呼び出します
- charバッファを割り当てる
- 実際のトークンを取得するために、その2つの関数を再度呼び出します
サンプルコード:
/**
* File: GetOidcIdAndAccessTokens.cpp
*
* Copyright 2025 by GraphOn Corporation
* All rights reserved.
*
* This software is the confidential and proprietary information
* of GraphOn Corporation ("Confidential Information"). You
* shall not disclose such Confidential Information and shall use
* it only in accordance with the terms of the license agreement
* you entered into with GraphOn.
*/
#include <Windows.h>
#include <stdio.h>
int main()
{
printf ("GetOidcIdAndAccessTokens\n");
HMODULE hRedirector = ::GetModuleHandleA ("redirector.dll");
if (hRedirector)
{
typedef unsigned int (WINAPI* fnGetOpenIDConnectToken)(unsigned int, char*);
fnGetOpenIDConnectToken pfnGetOpenIDConnectIDToken = (fnGetOpenIDConnectToken)::GetProcAddress (hRedirector, "GetOpenIDConnectIDToken");
if (pfnGetOpenIDConnectIDToken)
{
unsigned int length = pfnGetOpenIDConnectIDToken (0, NULL);
if (length)
{
printf ("GetOpenIDConnectIDToken(1) returned OIDC ID token length %d.\n", length);
char* oidcCustomClaims = NULL;
try { oidcCustomClaims = new char[length]; }
catch (...) {}
if (oidcCustomClaims)
{
length = pfnGetOpenIDConnectIDToken (length, oidcCustomClaims);
if (length)
{
printf ("GetOpenIDConnectIDToken(2) returned OIDC ID token length %d.\n", length);
printf ("GetOpenIDConnectIDToken(2) returned OIDC ID token %hs.\n", oidcCustomClaims);
}
else
printf ("ERROR GetOpenIDConnectIDToken(2) returned OIDC ID token length %d\n", length);
}
else
printf ("ERROR Failed to allocate ID token string length %d\n", length);
}
else
printf ("ERROR GetOpenIDConnectIDToken(1) returned OIDC ID token length %d\n", length);
}
else
printf ("ERROR ::GetProcAddress (hRedirector, \"GetOpenIDConnectIDToken\") failed!\n");
fnGetOpenIDConnectToken pfnGetOpenIDConnectAccessToken = (fnGetOpenIDConnectToken)::GetProcAddress (hRedirector, "GetOpenIDConnectAccessToken");
if (pfnGetOpenIDConnectAccessToken)
{
unsigned int length = pfnGetOpenIDConnectAccessToken (0, NULL);
if (length)
{
printf ("GetOpenIDConnectAccessToken(1) returned OIDC access token length %d.\n", length);
char* oidcCustomClaims = NULL;
try { oidcCustomClaims = new char[length]; }
catch (...) {}
if (oidcCustomClaims)
{
length = pfnGetOpenIDConnectAccessToken (length, oidcCustomClaims);
if (length)
{
printf ("GetOpenIDConnectAccessToken(2) returned OIDC access token length %d.\n", length);
printf ("GetOpenIDConnectAccessToken(2) returned OIDC access token %hs.\n", oidcCustomClaims);
}
else
printf ("ERROR GetOpenIDConnectAccessToken(2) returned OIDC access token length %d\n", length);
}
else
printf ("ERROR Failed to allocate access token string length %d\n", length);
}
else
printf ("ERROR GetOpenIDConnectAccessToken(1) returned OIDC access token length %d\n", length);
}
else
printf ("ERROR ::GetProcAddress (hRedirector, \"GetOpenIDConnectAccessToken\") failed!\n");
}
else
printf ("ERROR ::GetModuleHandle (\"redirector.dll\") failed!\n");
printf ("\nPress Enter to exit.\n");
::getchar ();
}
「GetOidcIdAndAccessTokens」テストアプリケーションを実行するには
- OpenID Connect認証が有効になっているGO-Globalホスト上で、https://cdn.graphon.com/portal_resources/Downloads/GetOidcIdAndAccessTokens.zipから「GetOidcIdAndAccessTokens.zip」ファイルをダウンロードし、解凍してください。
- 「GetOidcIdAndAccessTokens_32bit.exe」と「GetOidcIdAndAccessTokens_64bit.exe」の2つのテスト用アプリをGO-Globalに登録してください。
- GO-Globalセッションを開始します。
- GO-Global セッションでテストアプリを実行します。コンソールウィンドウに OpenID Connect の ID トークンとアクセストークンが表示されます。
結論
GO-GlobalにOpenID Connect認証を導入することで、管理者はアイデンティティ管理を一元化し、ユーザーの操作負担を軽減し、ホスト型アプリケーション全体のセキュリティを強化するための強力なツールを手に入れることができます。 適切なサインインワークフローを選択し、OIDCクレームがActive Directoryと整合するように設定し、必要なWindows権限を適用することで、組織はローカル環境とドメインベース環境の両方でシームレスな認証体験を実現できます。また、GO-Globalではユーザー名の処理をカスタマイズしたり、OIDCトークンにプログラムからアクセスしたりできるため、より高度なアプリケーションの要件にも対応可能です。これらの機能を組み合わせることで、管理者はWindows認証要件との完全な互換性を維持しつつ、最新のIDソリューションを柔軟に統合できるようになります。
クラウドベースのアプリケーション配信を検討中のISVですか?GO-Globalがお客様のエンドユーザーのソフトウェアアクセスを合理化するためにどのようなお手伝いができるかについては、当社までお問い合わせください。または、無料トライアルをダウンロードしてご自身でお試しください。

