GeneXus Access Manager (GAM) を使用するアプリケーションは
シングル サイン オン (SSO) を実装できます。
GeneXus の SSO ソリューションでは、関連するすべての Web アプリケーションを GAM データベースに接続する必要があります。これらのアプリケーションのうち 1 つが Identity Provider (サーバーアプリケーション) であり、その他のアプリケーションはクライアントアプリケーションとして参照されます。このトピックの詳細については、「
GAM を使用したアプリケーションのシングル サイン オン」を参照してください。
SSO は、分散されたさまざまな Web アプリケーションで一元化された認証を実現するためのソリューションを提供します。オーソライズは、常にクライアントアプリケーションで一元管理されます。
前述のように、クライアントアプリケーションはオーソライズを実行します。つまり、クライアントアプリケーションの GAM で、
ロールと
アクセス許可を定義する必要があります。
ただし、ユーザーが ID プロバイダーで認証を行う場合は、ID プロバイダーの GAM にあるロールの情報をクライアントアプリケーションの GAM に転送できます。
このメカニズムは次のとおりです:
- ユーザーが認証を行う場合、ロールのリストをサーバーからクライアントアプリケーションに転送できます。ユーザーにロールを割り当てるには、これらのロールをクライアントアプリケーションの GAM でマッピングする必要があります。
ロールのマッピングには、ロールの [ External ID ] プロパティを使用します。つまり、同じロールであるとみなすためには、サーバーにおけるロールの [ External ID ] が、クライアントにおけるロールの [ External ID ] と同じである必要があります。

図 1: サーバーにおけるロール

図 2: クライアントにおけるロール
- サーバーとクライアントのロールは同じ階層を持つ必要があります。
ただし、前述のように、オーソライズはクライアントアプリケーションで一元管理されるため、実際に重要なのは、クライアントにおけるロールの定義と階層です。また、アクセス許可はクライアントアプリケーションで一元管理されます。
ID プロバイダーの GAM では、すべてのクライアントアプリケーションを、対応するクライアント ID およびクライアントシークレットを指定して登録する必要があります。一方、クライアントアプリケーションでは、
GAMRemote 認証タイプを定義する必要があります。
1.
GAM Backoffice をサーバーアプリケーションで実行する場合は、登録されたクライアントアプリケーションの [ Can get user roles? ] チェックボックスを選択する必要があります:

図 3: SSO 用のサーバー設定: ユーザーロールの取得。GAMExampleEntryApplication Web パネルの実行
GAM API に属する、GAMApplication オブジェクトの ClientAllowGetUserRoles メソッドは、この Web パネル (GAMExampleEntryApplication) のコードで使用されるメソッドです。GAMExampleEntryApplication オブジェクトは「
GAM_Examples」に含まれています。
&Application.ClientAllowGetUserRoles = &ClientAllowGetUserRoles //&Application は GAMApplication データタイプ
2. GAM Web Backoffice をクライアントアプリケーションで実行する場合は、 [ Authentication and Roles ] を管理する GAM のリモート認証タイプの定義を指定する必要があります。

図 4: SSO 用のクライアント設定: ユーザーロールの取得。GAMExampleEntryAuthenticationType Web パネルの実行
GAM API を使用する場合のコードは次のようになります:
&AuthenticationTypeGAMRemote.FunctionId = &FunctionId.ToString() //&AuthenticationTypeGAMRemote は GAMAuthenticationTypeGAMRemote データタイプ&FunctionId は GAMAuthenticationFunctions ドメインに基づいている。
この設定の完了後、設定済みのリモート認証を使用してユーザーが認証を行うと、クライアントアプリケーションでは、Identity Provider にあるロールを使用してユーザーが更新されます。
ユーザーに割り当てられるのは、 [ External ID ] によって関連付けられているロールだけです。