53 AppLinkを使用したOracle Content and Experience Cloud Web UIの埋込み

Oracle Content and Experience Cloud AppLinkリソースを使用して、アプリケーションを統合し、指定したユーザーおよびロールのためにファイルまたはフォルダへのセキュア・アクセスをリクエストできます。

AppLinkを使用したWeb UIの埋込み

AppLinkを使用してOracle Content and Experience Cloudユーザー・インタフェースを埋め込む手順:

  1. Web UIを組み込むサード・パーティのアプリケーションにログインします。たとえば、UIをOracle Sales Cloudに埋め込むことができます。
  2. ログインしたサード・パーティのアプリケーションのユーザー名を識別します。たとえば、サード・パーティのアプリケーションがJavaで作成されている場合、次のコードを使用してユーザー名を取得できます。
    ADFContext.getCurrent().getSecurityContext().getUserName();
  3. サード・パーティのアプリケーションのユーザーのAppLinkを作成し、必要なフォルダへのアクセス権を付与します。
    1. REST APIを使用して、AppLinkエンドポイントに対してPOST HTTPリクエストを発行します。
      http://<host>/documents/api/1.1/applinks/folder/{folder id}

      <host>は、Oracle Content and Experience CloudインスタンスのURLであり、{folder id}は、フォルダのグローバル一意識別子(GUID)です。

    2. POST HTTPリクエストに、Oracle Content and Experience Cloudアカウントの資格証明を渡します。
      Authorization basic + <base 64 encoded username:password>
    3. リクエスト本体に、たとえば、JSONオブジェクト内の次のAppLinkパラメータを渡します。
      { "assignedUser": "<Third Party Application user>", "userLocale": "en-US", "userTimeZone": "Asia/Kolkata" "role": "contributor" }

      assignedUserは必須ですが、roleはオプションです。「コンテンツ管理のためのREST API」「フォルダのAppLinkの作成」を参照してください。

      AppLink属性が含まれるレスポンスのJSONオブジェクトを取得します。次に例を示します。

      { "accessToken": "<access_token>", "appLinkID": "<applink ID >”, "appLinkUrl": "<applink url>", "errorCode": "<error code>", "id": "<applink resource id>", "refreshToken": "<refresh token>", "role": "<role as requested>", "type": "applink" }
  4. iFrameを使用してアプリケーションのHTML内のレスポンスからappLinkUrlを埋め込みます。Javaサーブレットを使用している場合、次のコードのように実行できます。
    @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException){ out.println("<html>"); out.println("<head><title>ContentExperienceCloudServlet</title>"); out.println("<script type=\"text/javascript\">"); out.println(onPageLoadFunction()); out.println(handleMessageFunction()); out.println(addIFrameFunction()); out.println("</script>"); out.println("</head>"); out.println("<body onload=\"onPageLoad()\">"); } private String addIFrameFunction(){ StringBuilder sb = new StringBuilder(); sb.append("function addIFrame() {"); sb.append("var if1 = document.createElement('IFRAME');"); sb.append("if1.width='100%';"); sb.append("if1.height = '100%';"); sb.append("if1.id = 'iFrame1';"); sb.append("if1.src = '" + <AppLinkURL> + "';"); sb.append("document.body.appendChild(if1);}"); return sb.toString(); } private String onPageLoadFunction(){ StringBuilder sb = new StringBuilder(); sb.append("function onPageLoad(evt) {"); sb.append("console.log(\"In onPageLoadFunction\");"); sb.append("if (window.addEventListener) {"); sb.append("console.log(\"Adding EventListener\");"); sb.append("window.addEventListener(\"message\", handleMessage, false);}"); sb.append("addIFrame();}"); return sb.toString(); } private String handleMessageFunction(){ StringBuilder sb = new StringBuilder(); // check for and react to appLinkReady message sb.append("function handleMessage(event) {"); sb.append("console.log(\"In handleMessageFunction\");"); sb.append("if (event.data.message ==\"appLinkReady\") {"); sb.append("var msg = {"); sb.append("message : 'setAppLinkTokens',"); sb.append("appLinkRefreshToken:\"" + <refreshToken> + "\","); sb.append("appLinkAccessToken:\"" + <accessToken> + "\","); sb.append("appLinkRoleName:\"" + <appLinkRole> + "\","); sb.append("embedPreview : true};"); // get reference to OCEC iFrame window and post message sb.append("var frame = document.getElementById(\"iFrame1\");"); sb.append("var iframewindow = frame.contentWindow ? frame.contentWindow : frame.contentDocument.defaultView;"); sb.append("iframewindow.postMessage(msg, '*');}}"); return sb.toString(); }

    注意:

    Oracle Sales Cloudなどの一部のOracle SaaSアプリケーションでは、iFrameを埋め込む前に考慮する必要があるセキュリティ上の推奨事項があります。クリックジャッキング攻撃を回避する方法については、「Oracle Sales Cloud内のIFrameへのアプリケーションの埋込み可能化」を参照してください。
埋め込まれた後、HTTP POSTリクエストに指定したユーザーおよびフォルダに対してOracle Content and Experience Cloudユーザー・インタフェースがレンダリングされます。
AppLinkエンドポイントの使用の詳細は、「Oracle Content and Experience Cloudのための開発」「AppLinksリソース」を参照してください。

注意:

異なるドメインからiFrameを埋め込んでいる場合、Oracle Content and Experience Cloud内の「管理」の下にある許容ドメインのリストにこれらを追加する必要があります。 「Oracle Content and Experience Cloud用の開発」「他のドメインのコンテンツの表示」を参照してください。

Oracle Sales CloudでのIFrameの埋込みに関する問題のトラブルシューティング

場合によっては、Oracle Sales CloudでIFrameを埋め込むときに問題が発生する可能性があります。

セキュアな接続を確立する際に、HTTPSプロトコルを使用する場合と標準HTTPプロトコルを使用する場合でいくつかの共通の問題が発生します。たとえば、アプリケーションを埋め込む場合、空のiFrameが表示されます。

  • アプリケーションのURLが正しいことを確認します。ブラウザの開発者ツールを使用して、正しいホスト名などを使用して、生成されたURLが正しいことを確認します。

  • Oracle Java Cloud Service - SaaS Extensionサーブレットを使用してiFrameを埋め込んでいる場合、HTTPではなく、HTTPSを使用してサーブレットにアクセスしていることを確認します。セキュリティ上の理由により、ほとんどのブラウザでは、同じブラウザ・ページでHTTPコンテンツとHTTPSコンテンツを混在させることはできません。

  • サーブレットによってエラー・ログが作成されている場合、JCS - SaaS Extensionアプリケーションのデバッグ・ログを調べることができます。アプリケーションの実行時にエラーが発生したが、ブラウザに明白なエラーが表示されない場合、JCS - SaaS Extensionコンソール内のエラー・ログを確認してください。「サービスおよびアプリケーション・ログの表示」を参照してください。