複数の分散した REST サービス間での一元化された認証を可能にするための機能です。
たとえば、アプリケーション A でアプリケーション B の REST サービスを呼び出す必要がある場合のために、アプリケーション A にアプリケーション B のセキュアな REST サービスを呼び出すトークンを与える、一元化された認証エンティティがあります。
これはシングルサインオン (SSO) に似た機能ですが、一元化された認証エンティティ (ID プロバイダー) でのログインには Rest を使用します (UI を使用しない)。
この認証タイプの特徴をいくつか次に示します:
- ユーザーは、ローカルログインに資格情報を入力します。GAM リモート認証の場合のように ID プロバイダーのログインにリダイレクトされることはありません。ID プロバイダー (IDP) が常にユーザー資格情報を所有します。
- ログインは、IDP に対して GAM リモート REST 認証タイプ (OAuth 2.0) を使用して実行します。
- ログイン後、クライアントアプリケーションは、このスキームをサブスクライブしているほかのアプリケーション (IDP 以外) の REST サービスを呼び出すための SSO REST トークンを IDP から取得できます。
このページには次の内容が含まれます:
ソリューションのスキームを簡単に説明します。これは OAuth 2.0 プロトコルに基づくものです。詳細については、実装のセクションを参照してください。
3 つのナレッジベース (アプリケーション A、アプリケーション B、IDP) があるとします。それらすべてで、GAM が有効になっています。
- アプリケーション A から GAM リモート REST 認証タイプ (OAuth 2.0) を使用して ID プロバイダー (IDP) にログインします。
{ClientId + Credentials + Scopes + RepositoryGUID} が IDP に送られます。
- IDP が応答してアクセストークンを返します。
- ユーザー情報を求めます。
{access token} が IDP に送られます。
- IDP が応答してユーザー情報を返します。
- IDP で GAM セッションを生成します。
- アプリケーション A でローカル GAM セッションを生成します。
- アプリケーション B の REST サービスにポストします。
{Authorization: <SSO Rest Token>} が認証ヘッダーとして送られます。クライアント ID が HTTP ボディリクエストで送られます。
- 受け取った SSO REST トークンを使用して、アプリケーション B がトークンとユーザー情報を IDP にリクエストします。
{Authorization: <SSO Rest Token>} が認証ヘッダーとして送られます。クライアント ID が HTTP ボディリクエストで送られます。
- トークンとユーザー情報が IDP からアプリケーション B に返されます。
- アプリケーション B でローカル GAM セッションが生成されます。
- アプリケーション B が REST サービス応答をアプリケーション A に送ります。
これまで説明したように、使用例では複数のアプリケーションが関わり、それぞれが通信し合って REST サービスを呼び出す必要があります。ユーザーがいずれかのアプリケーションにログインすると (SSO REST トークンを返すように構成されている ID プロバイダーを経由してログイン)、そのアプリケーションはトークンを使用して、このスキームをサブスクライブしているほかのアプリケーションの REST サービスを呼び出すことができます。
ユーザーのログイン時に、クライアントは次の URL を使用して、有効なトークンを求める呼び出しを行います:
$ServerURL/oauth/gam/v2.0/access_token
ユーザーの情報は次の HTTP リクエストによってリクエストされます:
POST $ServerURL/oauth/gam/v2.0/RequestTokenAndUserInfo HTTP/1.1
すべてのナレッジベースで GeneXus Access Manager (GAM) が有効になっている必要があります。
「REST アプリケーションでの SSO 用のサーバー側の設定」を参照してください。
「REST アプリケーションでの SSO 用のクライアント側の設定」を参照してください。
[ &GAMSession.SSORestToken ] プロパティを使用して、同じスキームをサブスクライブしている REST サービスを呼び出すための SSO REST トークンを取得できます。
&GAMSession = GAMSession.Get(&GAMErrorCollection)
if not &GAMSession.SSORestToken.IsEmpty()
&httpClient.AddHeader(!"Content-Type", !"application/x-www-form-urlencoded")
&httpClient.AddHeader(!"Authorization", &GAMSession.SSORestToken )
&httpClient.Execute(HttpMethod.Post, &StrCall )
&ResultHttpC = &httpClient.ToString()
endif
GeneXus 17 以降。
|