GAMRemoteREST 認証タイプを使用すると、GAM を使用しているアプリケーションで別の GAM を ID プロバイダーとして使用できます。ユーザーは ID プロバイダー (IDP) に保存されている資格情報を使用してアプリケーションにログインします。
このため、クライアントアプリケーション (独自の GAM がある Web または SD)、およびユーザーが認証される ID プロバイダー (GAM を使用) があります。
このソリューションは一般に、信頼できる環境で使用します。ユーザーの資格情報がクライアントによって入力され、アプリケーション内を通過するからです。
このソリューションのスキーマを
簡略化して次に示します (実装の詳細は後述します)。
- ユーザーがクライアントアプリケーションで資格情報を入力します。
- この資格情報 (およびその他の情報、詳細は後述) を使用して ID プロバイダーの REST 認証サービスが呼び出され、ここでユーザーが認証されます。
- ID プロバイダーから呼び出し元に応答が送信されると、クライアントアプリケーションに戻ります (認証に失敗した場合はエラーが返されます)。
GAMRemote 認証タイプ (同様に OAuth 2.0 を使用) と似ていますが、この場合はログインに REST が使用されます。このため、
SSO のシナリオの場合のように、ID プロバイダーのログインへのリダイレクトはありません。
この認証タイプの特徴をいくつか次に示します:
- ユーザーは、ローカルログインに資格情報を入力します。GAM リモート認証の場合のように ID プロバイダーのログインにリダイレクトされることはありません。ID プロバイダーが常にユーザー資格情報を所有します。
- ログインは GAM リモートと同じプロトコルで行われます (OAuth 2.0)。
前述のように、資格情報がクライアントで入力されるため、これは一般に信頼できる環境で使用します。
- 別の GAM で実行されているサービスを呼び出すトークンが必要な場合。
ログイン後に、ID プロバイダーの GAM およびクライアントの GAM で GAMSession が生成されます (GAM リモート認証の場合と同様)。GAMSession には、REST サービスを呼び出すためのローカルトークンおよび外部トークンがあります (サービスがクライアントとサーバーのどちらでホストされているかによります)。
GAM を使用するアプリケーションから、GAM を使用する REST サービスを利用する必要がある場合は、HTTP 呼び出しを使用する代わりに、GAMRemoteREST 認証タイプを使用して有効なトークンを取得し、プロバイダーのアプリケーションに対して認証を行うことができます。
- スマート デバイス アプリケーションで、ID プロバイダーに対する認証が必要で、ユーザーを IDP の Web ログインにリダイレクトすることを回避したい場合。
アーキテクチャおよび実装
アーキテクチャのスキーマを次に示します (細部は一部省いていますが、基本的な仕組みは理解できます)。
ユーザーのログイン時に、クライアントは ID プロバイダーにリダイレクトするのではなく、次の URL を使用して、有効なトークンを求める呼び出しを行います:
$ServerURL/oauth/gam/v2.0/access_token
ユーザー情報は次の URL でリクエストします。
$ServerURL/oauth/gam/v2.0/userinfo
クライアントのナレッジベースで実行されている REST サービスを呼び出します。
最初に GAMRemoteREST を使用してログインします。
&AdditionalParameter.AuthenticationTypeName = !"gamremoterest" //&AdditionalParameter は GAMLoginAdditionalParameters データタイプ
&LoginOK = GAMRepository.Login(&user, &password, &AdditionalParameter, &GAMErrors)
その後、REST サービスを呼び出すためのトークンをいつでも GAMSession から取得できます。
&AccessToken = GAMSession.GetToken()
//ここで Authorization ヘッダーを使用して REST サービスを呼び出す
&httpclient.AddHeader(!"Authorization",!"OAuth " + &AccessToken)
&httpclient.AddHeader(!"GeneXus-Agent",!"SmartDevice Application")
&httpclient.Execute(&method,&getstring) //例: &httpclient.Execute(!"GET",!"http://server/baseurl/rest/GetCustomers")
GAMSession.GetToken() メソッドがローカルトークンを返します (クライアントのナレッジベースのサービスを呼び出す際に役立ちます)。このトークンに適したセキュリティポリシーは Web です (OAuth ではないため、このトークンのタイムアウトは Web セッションのタイムアウト)。
サーバーのナレッジベースのサービスを呼び出す場合は、次のように外部トークン (Authorization ヘッダーで渡される) を取得する必要があります:
&GAMSession = GAMSession.Get(&GAMErrors)
&AccessToken = &GAMSession.ExternalToken
「
GAM の Login メソッド」を参照してください。
「
GAMRemoteREST 認証タイプのサーバー側の設定」を参照してください。
「
GAMRemoteREST 認証タイプのクライアント側の設定」を参照してください。
GeneXus 16 Upgrade 7 以降で使用できます。
GAM を使用した REST サービスに対するシングルサインオン