最近のアクセス:
GAM を使用した REST サービスに対するシングルサインオン

複数の分散した 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 が有効になっています。
  1. アプリケーション A から GAM リモート REST 認証タイプ (OAuth 2.0) を使用して ID プロバイダー (IDP) にログインします。
    {ClientId + Credentials + Scopes + RepositoryGUID} が IDP に送られます。
  2. IDP が応答してアクセストークンを返します。
  3. ユーザー情報を求めます。
    {access token} が IDP に送られます。
  4. IDP が応答してユーザー情報を返します。
  5. IDP で GAM セッションを生成します。
  6. アプリケーション A でローカル GAM セッションを生成します。
  7. アプリケーション B の REST サービスにポストします。
    {Authorization: <SSO Rest Token>} が認証ヘッダーとして送られます。クライアント ID が HTTP ボディリクエストで送られます。
  8. 受け取った SSO REST トークンを使用して、アプリケーション B がトークンとユーザー情報を IDP にリクエストします。
    {Authorization: <SSO Rest Token>} が認証ヘッダーとして送られます。クライアント ID が HTTP ボディリクエストで送られます。
  9. トークンとユーザー情報が IDP からアプリケーション B に返されます。
  10. アプリケーション B でローカル GAM セッションが生成されます。
  11. アプリケーション B が REST サービス応答をアプリケーション A に送ります。

    イメージ:46494.png

使用例

これまで説明したように、使用例では複数のアプリケーションが関わり、それぞれが通信し合って 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 以降。


 

サブページ
Created: 21/04/20 02:19 by Admin Last update: 21/05/20 21:16 by Admin
カテゴリ
Powered by GXwiki 3.0