設定 Oracle Identity Cloud Service 中的應用程式

為了讓認證能夠正常運作,您必須使用與 Oracle Fusion Applications Cloud Service 及 Oracle PaaS ( Oracle Visual Builder ) 或自訂 ml5 應用程式相同的 Oracle Identity Cloud Service 執行處理。在 Oracle Identity Cloud Service 中,您需要建立用於從屬端認證的應用程式。

在此情況下,我們會使用 Oracle Identity Cloud Service 作為個別的個體,而非針對兩者使用相同的 Oracle Identity Cloud Service Application,來保護 Oracle Functions 加上 Oracle API Gateway 與 Oracle Functions 與 Oracle Fusion Applications Cloud Service 個體之間的互動。

通常,由 Oracle 客戶撰寫的 Oracle SaaS 擴充應用程式會執行一些複雜的邏輯。例如,常見的案例是從 Oracle Fusion Applications Cloud Service 取得資料,以某種方式處理資料,然後將資料發送回 Oracle Fusion Applications Cloud Service,再發送到另一個目標 (例如資料庫)。

因此,我們在這裡有兩個 Oracle Identity Cloud Service 應用程式的架構:

  • 此應用程式可以保護您的 Oracle Functions 作為資源,並作為 Oracle Fusion Applications Cloud Service 的信任從屬端。
  • 可保護您的 Oracle Fusion Applications Cloud Service 執行處理作為資源的應用程式。

本文章中的指示將逐步引導您完成建立及設定這些應用程式第一個的程序,以保護 Oracle Functions。這兩個應用程式的第二個應用程式已經存在:您必須先建立並設定應用程式,才能夠在 Oracle Fusion Applications Cloud Service 與 Oracle PaaS 之間啟用聯合項目。

此設定可讓您設定不同規則或原則來存取「信任從屬端」之規則或原則以外的函數,來達到 Oracle Fusion Applications Cloud Service。在此組態中,「API 閘道」的內送存取記號只需要 Oracle Functions 的授權存取才能呼叫「函數」功能,但不一定要同時具有存取 Oracle Fusion Applications Cloud Service 執行處理所需的授權。Oracle Visual Builder 應用程式需要關聯的「Oracle Identity Cloud Service 應用程式」,才能產生存取權杖以連線「API 閘道」。此「Oracle Identity Cloud Service 應用程式」將會是「函數/API 閘道資源」的從屬端。

架構圖表中顯示的記號交換提供一個額外的保護層,以在「函數」為Oracle Fusion Applications Cloud Service 資源的從屬端時傳輸識別(類似Oracle WebLogic OAuth宣告處理作業,其使用舊版SaaS擴充功能的Oracle Identity Cloud Service (例如使用Oracle Java Cloud Service的擴充功能)。

這可能意謂著在某些使用案例中,用來產生 Oracle Functions 之記號的 Oracle Identity Cloud Service 應用程式只能針對「函數」使用資源範圍,而不能針對 Oracle Fusion Applications Cloud Service。在此情況下,Oracle Functions 不會重複使用記號來呼叫 Oracle Fusion Applications Cloud Service,但是在達到 Oracle Functions 時會有效。因此,您可以導入邏輯流程,而部分使用者或「功能」版面配置沒有存取權,而其他使用者則根據商業邏輯、使用者角色和權限或其他條件。

在其他使用案例中,Oracle Functions 可以使用 API 閘道要求中傳送的憑證和使用者,包括用來要求 Oracle Fusion Applications Cloud Service 之存取權杖的程式碼。

Oracle Identity Cloud Service 中為 Oracle Functions 建立應用程式

Oracle Identity Cloud Service 中,您必須建立 Oracle Functions 從屬端認證所使用的機密應用程式。

在與 Oracle Fusion Applications Cloud Service 執行處理聯合的相同 Oracle Identity Cloud Service 執行處理內,建立機密應用程式並確保從屬端組態已設定,以便啟用從屬端證明資料、JWT 宣告和資源擁有者授權。

  1. 登入 Oracle Cloud My Services,按一下使用者,然後按一下識別主控台
  2. 選取應用程式頁籤,然後按一下新增。然後按一下機密應用程式
  3. 在「新增機密應用程式」精靈的「詳細資訊」頁面,提供新應用程式的名稱。您也可以設定其他值,例如描述、圖示、顯示設定值以及標記。按一下下一步
  4. 從屬端頁面上,選取立即將此應用程式設定為從屬端
    其他選項會顯示在頁面上。以下列方式設定:
    • 允許的授權類型:選取資源擁有者從屬端證明資料以及 JWT 宣告
    • 啟用允許非 HTTPS url
    • 此使用案例不需要重新導向 URL。
    • 從屬端類型:保留選取的機密選項。
  5. 在「資」段落中,選取註冊資源。當您建立「API 軟體」執行處理時,請將「主要對象」值設為「Oracle Cloud Infrastructure 主控台」中產生的「API 閘道」執行處理主機名稱。
    Oracle Cloud Infrastructure 中,您可以選取您的閘道、選取閘道資訊頁籤,然後在頁籤中顯示執行處理主機名稱
  6. 範圍下,按一下即可新增範圍,並為使用 API 閘道 JWT 授權原則的建置新增一個基礎 url 值。例如/saasextension
    您會使用此範圍來允許應用程式存取 Oracle Functions 資源。您可以視需要為額外資源新增範圍。
  7. 您不需要授予管理 Api 的存取權。
  8. 下一步移至「資源」頁面,然後再按一下下一步,即可移至「授權」頁面。
  9. 在「授權」頁上,按一下完成
    將會顯示應用程式新增通知,而且您的從屬端 ID 和從屬端密碼。請注意以後使用。關閉通知後,應用程式就會顯示。
  10. 按一下應程式名稱右邊的啟動按鈕。

準備及測試您的 Oracle Identity Cloud Service 應用程式

設定 Oracle Identity Cloud Service Confidential 應用程式,以連線至與您 Oracle Fusion Applications Cloud Service 執行處理對應的應用程式,然後測試應用程式。

在此程序中,您會設定新建立的 Oracle Identity Cloud Service 應用程式「資源」來新增您 Oracle Fusion Applications Cloud Service 應用程式的「範圍」,然後驗證 Oracle PaaS 系統中的授權使用者帳戶可以取得 Oracle Fusion Applications Cloud Service 執行處理的記號。
  1. 登入 Oracle Cloud My Services,按一下使用者,然後按一下識別主控台
  2. 選取應程式頁籤,然後找到並選取您剛才為 Oracle Functions 建立的應用程式。
  3. 編輯記號發行原則。將授權資源設為全部。
  4. 新增含 Fusion 應用模組範圍的 Oracle Applications Cloud (Fusion) 資源 (不需要受保護)。
  5. 確認您擁有的使用者帳戶存在於 Oracle PaaS 和 Oracle Fusion Applications Cloud Service 中,並具備存取您要使用 REST API 呼叫查詢之資料的足夠權限。例如,「銷售管理員」角色可能就足夠。
  6. 請使用這些使用者證明資料產生存取權杖來測試應用程式。您可以指定範圍 ( Oracle Identity Cloud Service Oracle Fusion Applications Cloud Service Application OAuth 專屬保護的資源主要對象值) 來使用 Postman Request Token 功能產生存取記號。對於此簡單測試,請使用密碼證明資料作為「授權類型」,以在產生的記號中將使用者名稱當作主體。(在生產環境中,您會使用從屬端將提供使用者資訊的從屬端證明資料。)存取記號 URL 是由 Oracle Identity Cloud Service 主機 URL 採用並附加 /oauth2/v1/token 所構成。例如, https://<您的識別雲端主機名稱。identity116 cloud.com >/oauth2/v1/token
如果所有項目都正確運作,您應該收到 JWT 記號作為回應,然後可以在呼叫 Oracle Fusion Applications Cloud Service REST API 端點並接收相同的輸出。例如:
curl --location --request GET 'https://<your fusion instance>.<domain>.com/fscmRestApi/resources/11.13.18.05/expenses' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <JWT_TOKEN>'
此 curl 查詢應該會傳回「費用」資料。

將 Oracle Functions Oracle Identity Cloud Service 應用程式設定為信任的從屬端

Oracle Identity Cloud Service 應用程式必須使用憑證作為「信任的從屬端」,才能在 Oracle Functions 提出 OAuth 要求。如果您還沒有憑證,則可以在開發期間產生自行簽署憑證以供使用。

如果您還沒有金鑰,可以使用提供的命令檔 genSelfSignedKeypair.sh 來產生金鑰。指定用戶和金鑰別名值以執行命令檔。在此範例中,我們提供了 mytenant 為租用戶名稱,並 fnassertionkey 作為金鑰別名。

  1. 如有需要,請使用此解決方案播放書本程式碼範例提供的命令檔來產生憑證:
    $ ./genSelfSignedKeypair.sh --tenant mytenant  --keyalias fnassertionkey
    ==============================================
    Generating Self Signed Certificates in Kesytore
     
     
    General Properties:
    -------------------------------
    ==> Workdir: ./genCertsDir
    ==> Tenant Name: mytenant
    ==> Key Alias: fnassertionkey
     
    Keystore Properties:
    -------------------------------
    ==> Store Type: PKCS12
    ==> Key Algorithm: RSA
    ==> Key Size: 2048
    ==> Validity time(days): 1825
    ==> Sign Algorithm: SHA256withRSA
    ==> dname: CN=mytenant FN Assertion, O=mycompany, L=mylocation, ST=mystate, C=mycountry
     
    Passwords:
    [*] Keystore Password:
    [*] PrivateKey Password:
     
    Generate keypair in keystore ./genCertsDir/mytenant-keystore.p12 ...
    Generating 2,048 bit RSA key pair and self-signed certificate (SHA256withRSA) with a validity of 1,825 days
        for: CN=mytenant FN Assertion, O=mycompany, L=mylocation, ST=mystate, C=mycountry
    [Storing ./genCertsDir/mytenant-keystore.p12]
    Export public certificate with alias fnassertionkey from generated keystore (openssl) ...
    Certificate stored in file <./genCertsDir/mytenant-fnassertionkey-cert.pem>
    Extract Private Key in PKCS8 format from generated keystore (openssl) ...
    Self Signed certificate generated successfully
    ==============================================
    Files generated:
    ==> ./genCertsDir/mytenant-keystore.p12
    ==> ./genCertsDir/mytenant-fnassertionkey-cert.pem [Stored in Keystore]
    ==> ./genCertsDir/mytenant-fnassertionkey-pkcs8-key.pem [Stored in Keystore]
    ==============================================

    產生的檔案將會用於您的「函數」程式碼和「Oracle Identity Cloud Service 應用程式」組態中:

    • mytenant-keystore.p12:產生的金鑰儲存庫可用於您的程式碼,用於解壓縮用於宣告處理作業的認證。
    • mytenant-fnassertionkey-cert.pem:用於 Oracle Identity Cloud Service 應用程式組態中公用憑證。

    不需要第三個 pem 檔案,但系統會從程式碼中的 mytenant-keystore。p12 金鑰存放區擷取相似的版本,然後將它匯出為參照:

    • mytenant-fnassertionkey-pkcs8-key .pem:PKCS8 格式的私密金鑰
  2. 使用信任的從屬端類型設定 Oracle Functions Oracle Identity Cloud Service 應用程式,並使用憑證的金鑰別名新增憑證。登入 Oracle Cloud My Services,按一下使用者,然後按一下識別主控台
  3. 選取應用程頁籤,然後選取您稍早針對 Oracle Functions 存取所建立的 Oracle Identity Cloud Service 應用程式。
  4. 從屬端組態區段中,尋找憑證欄位,輸入您用於憑證的別名 (在上面的範例中為 fnassertionkey),然後按一下匯入按鈕以匯入 mytenant-fnassertionkey-cert.pem 檔案。

將金鑰存放區資訊匯入 Oracle Cloud Infrastructure Vault

使用 Oracle Functions 的宣告處理作業將需要使用匯入的金鑰存放區和密碼。為了達到最佳安全性並避免使用硬式編碼的密碼和密碼,您可以利用 Oracle Cloud Infrastructure Vault

Oracle Cloud Infrastructure Vault 服務可讓您安全地加密並儲存機密資料。您可以將金鑰存放區與公開金鑰密碼儲存在 Vault 中,然後使用 Oracle Functions 後端中的 Oracle Cloud Infrastructure SDK 來參照它,以執行傳遞。您也可以安全地加密並儲存 JKS 檔案。

您必須在此解決方案播放書的「開始之前」區段中,使用「快速開始導引」來設定您的 Oracle Functions 環境。「快速啟動導引」設定會要求您在根區間層次建立「函數」的「原則」。在下列範例中,該原則的名稱為 FnTenancyPolicy。您需要新增其他敘述句到原則中,才能讓 Oracle Functions 存取與該原則關聯的保存庫。用於 Oracle Functions 的群組名稱應為您在快速開始指南中設定用戶時所建立的名稱。在此範例中,fnGroup1 是可以使用 Oracle Functions 的使用者群組。

  1. Oracle Cloud Infrastructure 主控台中,於 Governance and Administration 底下移至 Identity,然後按一下原則
    就會顯示您目前檢視之區間中的原則清單。
  2. 從左邊的清單中選取根區間。
  3. 選取 Oracle Functions 原則的名稱 (例如 FnTenancyPolicy),然後按一下編輯原則敘述句。新增下列敘述句:
    allow group fnGroup1 to manage secret-family in tenancy
    allow group fnGroup1 to manage vaults in tenancy
    allow group fnGroup1 to manage keys in tenancy
  4. 選取儲存變更
  5. 在您的區間中建立 Vault 執行處理。
    1. Governance and Administration 群組底下,移至 Security,然後選取 Vault
    2. 在清單範圍下的區清單中,選取要建立保存庫的區間名稱,然後按一下建立保存庫。
    3. 在建立 Vault 對話方塊中,按一下名稱,然後輸入該 Vault 的顯示名稱。請避免在此欄位中輸入任何機密資訊。
    4. (選擇性) 選取將虛擬專用保存庫設為虛擬專用保存庫核取方塊,將儲存庫設為虛擬專用保存庫
    5. 選取建立
  6. 建立與密碼關聯的金鑰執行處理。
    1. 在清單範圍下的區清單中,選取您要建立金鑰的區間名稱,然後按一下剛才建立的保存庫名稱
    2. 選取索引鍵,然後選取建立索引鍵
    3. 在建立金鑰對話方塊中,從區間清單中選擇一個區間。(金鑰可以存在於保存庫所在區間之外。)
    4. 選取名稱,然後輸入識別金鑰的名稱。請避免在此欄位中輸入任何機密資訊。
    5. 從金鑰形狀:長度清單中選擇長度,以位元為單位指定金鑰長度
    6. 完成時,請按一下建立金鑰
  7. 建立「宣告」案例所需的密碼:
    1. 金鑰庫密碼
    2. 主索引鍵密碼
    3. 金鑰存放區檔案
    您將需要新增「金鑰存放區」檔案內容的 Base64-encoded 表示法。您可以使用 openssl 命令來產生命令:
    openssl base64 -in <YourKeystoreName>.p12 -out ksBase64Encoded.txt | cat ksBase64Encoded.txt

    將內容複製到加密密碼中的金鑰值。建立新的密碼:

    1. 在清單範圍下的區間清單中,選取要建立密碼的區間名稱。
    2. 從區間的保存庫清單中,選取剛才建立的保存庫名稱。
    3. 選取碼,然後選取建立密碼
    4. 在建立機密對話方塊中,從區間清單中選擇一個區間。(保存庫位於區間之外可以有密碼)。
    5. 選取名稱,然後輸入識別密碼的名稱。請避免在此欄位中輸入任何機密資訊。
    6. 選取明,然後輸入簡短的密碼說明以協助識別密碼。請避免在此欄位中輸入任何機密資訊。
    7. 選擇您要在將機密內容匯入 Vault 時用來加密機密內容的主要加密金鑰。(索引鍵必須屬於相同的保存庫)
    8. 從「密碼類型樣板」清單中選擇樣板類型,指定您所提供之密碼內容的格式。(當您使用「主控台」建立機密或機密版本時,您可以使用純文字提供秘密內容,但是在將機密內容傳送至服務前,必須先將 base64-encoded 提供。如果您選擇此格式,主控台會自動為您編碼純文字密碼內容。)
    9. 選取機密內容,然後輸入機密內容。(機密組合的允許大小上限為 25 KB)。
    10. 您也可以選擇套用規則以管理使用密碼的方式。您可以建立一個關於重複使用密碼版本之間密碼內容的規則,或建立一個指定密碼內容何時到期的規則。
    11. 完成時,請選取建立密碼
    12. 針對您需要建立的每個密碼重複上述步驟。
  8. 建立動態群組:
    1. 在主控台中,選取識別,然後選取動態群組
      此時會顯示租用戶中的動態群組清單。
    2. 選取建立動態群組
    3. 輸入動態群組的名稱。記錄名稱供日後使用。此名稱在您租用戶的所有群組中必須是唯一的。您無法於稍後變更此名稱。
    4. 輸入描述。您無法使用主控台來變更描述,但可以使用 API 來變更描述。
    5. 在相符規則段落中,輸入下列規則 (使用區間的 OCID):
      ALL { resource.type = 'fnfunc', resource.compartment.id = 'ocid1.compartment.oc1..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'}
    6. 選取建立動態群組
      已驗證比對規則語法,但 Ocid 不是。請確定輸入的 Ocid 正確無誤。
  9. 新增您在 Oracle Functions Quick Start Guide 的根區間層次為 Oracle Functions 建立的原則敘述句,以允許您剛建立的動態群組存取您的安全性。
    1. 治理與管理底下,前往識別並按一下原則
      就會顯示您目前檢視之區間中的原則清單。
    2. 從清單中選取根區間。
    3. 選取 Oracle Functions 原則的名稱 (例如 FnTenancyPolicy),然後按一下編輯原則敘述句。新增下列敘述句:
      allow dynamic-group your_fn_group to read secret-family in tenancy
設定 Vault 密碼後,您可以使用 Oracle Cloud Infrastructure SDK 對每個密碼使用 OCID 來存取它們。特性 V_KEYSTORE、V_KS_PASS 和 V_PK_PASS 將會用於此解決方案稍後所述的範例函數。

Oracle Identity Cloud Service 中設定 Oracle Visual Builder 應用程式

Oracle Visual Builder 應用程式有一個關聯的「Oracle Identity Cloud Service 應用程式」,它會自動設定為「信任的從屬端」。您必須設定該應用程式,才能將它當作「Oracle Functions 資源」的從屬端使用。

作為建議架構中顯示的互動之一部分,與 Oracle Identity Cloud Service 執行處理相關聯的 Oracle Visual Builder 應用程式與 Oracle Fusion Applications Cloud Service 聯合並連線至 Oracle Functions,必須產生能夠連線「API 閘道」和「Oracle Functions 資源」(如「範圍」所設定) 的存取權杖。您必須在 Oracle Identity Cloud Service 中設定 Oracle Visual Builder 應用程式,以將它設為資源從屬端,藉由新增您建立的新 Oracle Functions 應用程式範圍來擴充 SaaS 功能。

Oracle Visual Builder 中建立新應用程式時,將會自動建立 Oracle Identity Cloud Service 應用程式。例如,如果您建立名為 TestSaaSExtensionFN 的應用程式,您可以導覽至 Oracle Identity Cloud Service 主控台和列出應用程式,而且您應該找到一個名為 TestSaaSExtensionFN 的應用程式。

  1. 建立 Oracle Visual Builder 應用程式。
  2. Oracle Identity Cloud Service 中,導覽至對應您新的 Oracle Visual Builder 應用程式的應用程式。
  3. 在「記號發行原則」段落中,將授權的資源設為特定,並使用新增範圍按鈕以「Oracle Functions API 閘道」執行處理的範圍新增資源。
    如果在 VBCS IDCS 應用程式中將重新導向 URL 標示為必要,則這是因為在「從屬端組態」中,已勾選允許的授權類型中的隱含核取方塊。在此情況下,您將需要在此輸入中提供 Oracle Visual Builder Web 應用程式的 URL。您可以視需要稍後更新這些值。
重複此處理作業以新增 Oracle Identity Cloud Service 中每個其他 Oracle Visual Builder 應用程式的範圍,該範圍應能夠連線「API 閘道」Oracle Functions 應用程式。