33 Oracle Sales Cloudのマッシュアップ用のJSON Webトークンの使用

ユーザー・インタフェース「マッシュアップ」では、Oracle Sales Cloudダッシュボード・ページに表示されるJCS - SaaS Extensionアプリケーション内のリンク済または埋込み済コンテンツを使用します。JSON Webトークン(JWT)ユーザー・トークンを使用して、JCS - SaaS Extensionアプリケーションによって公開されるSOAPまたはRESTサービスを起動する際の認証を行うことができます。

Oracle Sales CloudでのJWTの使用について

JWTユーザー・トークンは、UIのマッシュアップのユースケースでエンド・ユーザーのコンテキストを使用してJCS - SaaS Extension Webサービスを起動するためにOracle Sales Cloudアプリケーション・コンポーザでUIマッシュアップ、外部リンク、カスタム・オブジェクトおよびカスタム・フィールドを使用可能にする上で効果的なツールです。

JSON Webトークン(JWT)は、ユーザーID、有効時間および暗号化された認証コードなどの情報を渡すためのテクノロジです。JWTには、HTTPを使用して認証されたユーザー・アイデンティティを共有するためのOracle Sales CloudおよびJCS - SaaS Extension用のメソッドが用意されています。基本的には、ユーザーが1つのシステムで認証した後、他のシステムは、ユーザーのアイデンティティを検証するURLエンコード・コマンドを使用してJWT情報をリクエストして受信できます。

JWTのラウンドトリップ・パターン

JWTユーザー・トークンは、Oracle Sales CloudJCS - SaaS Extensionアプリケーションの間で次のパターンで交換されます。

  1. JWTトークンが、認証されたユーザーのセッションを使用してOracle Sales Cloud内で構築されます。

  2. このトークンは、URLの一部としてJCS - SaaS Extensionアプリケーションに渡されます。

  3. JCS - SaaS Extensionアプリケーションは、URLからトークンを引き出し、メモリーに格納します。

  4. このアプリケーションは、Oracle Sales CloudにWebサービスをコールバックするときに、トークン内の資格証明をHTTPヘッダーの一部として使用します。ユーザー・アイデンティティはトークンに含まれているため、このアイデンティティはOracle Sales Cloud Webサービス・コールにまで適用されます。

認証および認可

Webサービス・コールが成功した後でのみページ・コンテンツが表示されるため、JCS - SaaS Extensionの認証はこの場合、関係ありません。マッシュアップ対象のUIは常に保護解除する必要があります(つまり、認証を行わない必要があります)。誰かが有効なJWTトークンなしにJCS - SaaS Extension URLを使用してこのUIに直接アクセスすると、後続のWebサービス・コールにより、Oracle Sales Cloudデータへのアクセスが許可されないよう、このアプリケーションが自動的に保護されます。

JWTの実装

アプリケーション・コンポーザまたはページ統合ツールを使用してJWTユーザー・トークン情報の交換を実装することにより、JWTアプリケーションにリンクアウトするメニュー・アイテムを作成したり、Groovyスクリプトを使用して動的URLを構築したりできます。

マッシュアップでJWTユーザー・トークンを実装するには、次の2つの方法の1つを使用して、Oracle Sales CloudでJWTトークンを生成します。
  • 式言語の使用: #{applCoreSecuredToken.trustToken}。これは、Oracle Sales Cloudメニュー・アイテムからアプリケーションへのコールアウトを構築するときに使用します。

  • Groovyの使用: (new oracle.apps.fnd.applcore.common.SecuredTokenBean().getTrustToken())。これは、JCS - SaaS Extensionアプリケーションを指し示す動的URLを構築するときにスクリプト内で使用します。

注意:

この場合、「ADF Webサービス・プロキシの使用」で説明しているように、JWTをOWSMポリシーとして使用する方法とは対照的に、JWTをHTTPヘッダーで使用します。

ページ・コンポーザでのJWTの実装

このシナリオでは、ページ・コンポーザ・ツールを使用して、JWTトークンをJCS - SaaS Extensionアプリケーションに渡すリンクを構築します。

開始する前に:

  • 次のOracle Sales Cloudロールの1つがあることを確認します。
    • CRMアプリケーション管理者
    • アプリケーション実装コンサルタント
    • 営業管理者

    注意:

    これらのロールのいずれもない場合は、管理者に問い合わせてください。
  • Oracle Sales Cloudにサインオンします。
  • Oracle Java Cloud Service - SaaS ExtensionアプリケーションがOracle Sales Cloudに登録されていることを確認します。「Oracle Sales Cloud内のサード・パーティのアプリケーション」を参照してください。

JWTを実装する手順:
  1. サンドボックスをアクティブ化します。詳細は、「Oracle Sales Cloudサンドボックスでの作業の概要」を参照してください。
  2. 外部アプリケーションを配置するOracle Sales Cloudページの右上で、自分のユーザー名をクリックし、「設定およびアクション」メニューを展開します。
  3. 「パーソナライズ」セクションで、「ページの編集...」を選択します。
  4. 「コンテンツの追加」をクリックします。
  5. 「コンポーネント」の横で、「開く」をクリックします。
  6. 「Webページ」の右側の「+追加」をクリックしてから、「コンテンツの追加」ダイアログを閉じます。
    これで、「Webページ」コンポーネントがメイン・ウィンドウに表示されます。
  7. 新しい「Webページ」コンポーネントの右側の「編集」(レンチ)アイコンをクリックします。「コンポーネント・プロパティ: Webページ」ウィンドウが表示されます。
  8. 「表示オプション」タブで、「ソース」フィールドの横の下矢印をクリックし、「式ビルダー」を選択します。
  9. トポロジ・マネージャで外部アプリケーションがすでにサード・パーティのアプリケーションとして登録され、目的のURLパラメータ名としてJWTが登録された状態で、次の式言語(EL)コードを使用して完全なURLを生成します。この式を「値または式の入力」ボックスに入力します: #{EndPointProvider.externalEndpointByModuleShortName['CustomMappingUI']}/crmui.jspx?jwt=#{applCoreSecuredToken.trustToken}
    この場合CustomMappingUIは、登録されているアプリケーション名です。
  10. 「テスト」をクリックし、結果を表示します。「情報」ペインを詳細に調べます。完全なURLが表示されていることを確認します。そうでない場合、トポロジ定義エントリを再確認します。
  11. 「情報」ペインから結果をコピーし、ブラウザ・インスタンスに入力し、アプリケーションWebページがロードされることを確認します。
  12. すべてが想定どおりに機能している場合、「編集」ダイアログに戻り、「OK」をクリックします。
  13. 「名前」および「短い説明」フィールドに値を入力してから、「適用」および「OK」をクリックします。Webページで「Webページ」コンポーネントを挿入した場所がレンダリングされます。

ホーム・ページ・アイコンでのJWTの実装

このシナリオでは、JCS - SaaS Extension上でホストされているJWTアプリケーションにリンクアウトしているOracle Sales Cloudにホーム・ページ・アイコンを追加します。

ホーム・ページ・アイコンでJWTを実装する手順:
  1. 「JCS - SaaS Extensionアプリケーションを起動するためのOracle Sales Cloudのホーム・ページ・アイコンの追加」のステップに従い、新しいOracle Sales Cloudのホーム・ページ・アイコンを実装します。
  2. ステップ8で、JWTを渡すには、URLの問合せパラメータとして次のELを追加します: ?jwt=#{applCoreSecuredToken.trustToken}

    注意:

    式言語はナビゲータ・メニューがリフレッシュされるたびにレンダリングされます。
これにより、ターゲット・アプリケーションが(この場合、jwtパラメータを読み取ることによって) URLからJWTを読み取ることが可能になります

Groovyを使用した動的URLでのJWTの実装

このシナリオでは、JWT情報をJCS - SaaS Extensionアプリケーションに渡すGroovyを使用して動的URLを構築します。

Groovyを使用して動的URLにJWT情報を渡す手順:
  1. 「Oracle Sales CloudオブジェクトでのJCS - SaaS Extensionアプリケーションのサブタブとしての埋込み」のステップに従います。
  2. 次のスクリプトを使用してURLのJWTを生成します。
    def jwt = new oracle.apps.fnd.applcore.common.SecuredTokenBean().getTrustToken() return 'https://' + <hostname> + '/' + context + '?jwt=' + jwt

    <hostname>のかわりに自分のホスト名を使用します。

    JWTトークンを戻り値としてURLが生成されます。

例: JWTを使用して起動されたWebサービス

Webサービスを使用してJWTを認証メソッドとして使用するには、Webサービス・リクエスト・ペイロードとともにJWTをHTTPヘッダーに渡します。

たとえば、SOAPを使用します。

 public static UserDetailsService createUserDetailsSoapService() { UserDetailsService_Service service_Service; UserDetailsService service = null; // JWT requires no client policy SecurityPolicyFeature[] secFeatures = new SecurityPolicyFeature[] {new SecurityPolicyFeature("")}; service_Service = new UserDetailsService_Service(); service = service_Service.getUserDetailsServiceSoapHttpPort(secFeatures); // add credentials and keystore details String jwt = JSFUtils.resolveExpressionAsString("#{pageFlowScope.jwt}"); // add JWT auth map to HTTP header BindingProvider bp = (BindingProvider)service; Map<String,List<String>> authMap=new HashMap<String,List<String>>(); List<String> authZlist=new ArrayList<String>(); authZlist.add(new StringBuilder().append("Bearer ").append(jwt).toString()); authMap.put("Authorization",authZlist) ; System.out.println("AuthMap:" + authMap.toString()); bp.getRequestContext().put(MessageContext.HTTP_REQUEST_HEADERS,authMap); return service; }

RESTを使用するには、HTTP(S)認可ヘッダーを追加します。

Authorization / Bearer + <sp> + JWT token

次に、RESTコールを作成します。たとえば、商談を取得するには、次のようにします。

 https://<hostname>:<port>/salesApi/resources/latest/opportunities