遠端元件安全性

Oracle Content Management 除了讓第三方開發人員可以將他們的自訂元件整合到 Oracle Content Management 平台,也能將元件儲存在遠端伺服器上。

每個遠端元件在 Oracle Content Management 都必須要有註冊的設定值和呈現端點。除了端點之外,開發人員也必須提供註冊元件的唯一秘密金鑰。

Oracle Content Management 會呼叫註冊元件的端點,以顯現網站頁面中的內容。由於這些端點在公用網際網路上都是公開的,因此開發人員應確認已註冊遠端元件的端點都是從 Oracle Content Management 呼叫。驗證呼叫者的真實性時,系統會將已簽署的權杖傳遞至某個 URL 的已註冊端點。系統會驗證已簽署權杖中內嵌的數位簽章與註冊過程中提供之遠端元件的祕密金鑰來認證呼叫方。

權杖的格式為:

{base64 encoded serialized JSON data}.{base64 encoded signature}

以下是傳送給已註冊應用程式端點的範例權杖:

eyJpbnN0YW5jZWlkIjoiQTRGOTE3REY5OTZEN0Q3ODBCMjUzODZFOTFEMDA3ODJGMjVBRjY2Rjc3OTIiLCJzaWduZGF0ZSI6IjE0NDU2MzcwNTk5MTciLCJzaXRlZG9tYWluIjoic2VydmljZTEtdGVuYW50MS51cy5vcmFjbGUuY29tIiwicGVybWlzc2lvbnMiOiJTSVRFX09XTkVSIiwiZW50aXRsZW1lbnRzIjoiIn0=.5p3of7t11OwuysF3zpm+YgICSHH8C/BHczdbVZx2VH8=

權杖包含兩個不同的部分:資料和簽章 (以 '.' 分界字元區隔)。

一般的準則是,開發人員在授予某個元件之已註冊端點的存取權之前,應一律在「編輯」或「預覽」模式認證權杖。此外,在設定值端點認證呼叫方時,開發人員應一律負責尋找權杖之權限欄位中的 SITE_OWNER 值。權杖的權限欄位只有在「編輯」模式才會顯示 SITE_OWNER 值。在編輯階段作業期間產生的權杖一律不會保存回頁面模型,而且會變換為權限欄位值為 NULL 的程式實際執行權杖。

資料

執行處理的資料部分為 Base64 JSON 編碼字串。以下是該 JSON 字串的結構:

{
  "instanceid": "BBDC7614F693B75110D811E6C0B77C935FAEC5112E5E",
  "permissions": "",
  "entitlements": "",
  "signdate": "1435426735293",
  "sitedomain": "service1-tenant4.localhost"
}
欄位名稱 描述

instanceid

Oracle Content Management 租用戶元件的唯一 ID。

signdate

簽章產生日期。

sitedomain

Oracle Content Management 執行處理的網域名稱。

permissions

網站成員的一組權限。在「編輯」模式中,它的值為 "SITE_OWNER";否則不會有值。

entitlements

網站擁有者所購買的進階功能清單。

簽章

遠端元件執行處理的資料部分會在以 APP_SECRET_KEY 簽署之前先進行序列化。此秘密金鑰必須在註冊元件時產生並對開發人員顯示。此簽章是利用秘密金鑰來產生元件執行處理資料部分 (序列化的 JSON 結構) 的雜湊計算出來,如此處所示:

$signature = HMAC (serialized JSON structure, APP_SECRET_KEY)

系統將使用 SHA256 雜湊演算法產生簽章。接著會由序列化的 JSON 結構和產生的簽章串接成權杖,如下所示:

$instance = {base64encoded serialized JSON structure}.{base64encoded $signature}