建立 API 閘道部署

您可以在函數就緒之後,整合並測試從 Oracle Identity Cloud Service 進行 JWT 驗證的原生認證機制。

使用原生 JWT 驗證建立 API 閘道部署

您可以使用「Oracle Cloud Infrastructure 閘道原生 JWT 驗證」功能,針對部署新增以 Java Web 權杖 (JWT) 為基礎的認證原則。

此 JWT 類型可讓您指定必要的資料,以執行內送存取權杖的驗證 (透過標頭或參數)。此原則需要以下資訊:

  • 允許發照者:記號發照者。支援數個 OAuth 伺服器,但在此情況下,您將使用 https://identity.oraclecloud.com/
  • 對象:允許存取此記號的資源。
  • 公開金鑰:發照者與對象內用來驗證記號的 JSON Web 金鑰集 (JWKS)。允許使用兩種 JWKS:
    • 靜態金鑰:使用此選項時,您必須使用 JSON 格式手動指定 JWKS,此格式應具有根據 RFC 7517 第 4 部分的必要特性。
    • 遠端金鑰:使用此選項,您必須指定可使用 REST 來使用 JWKS 的 URL。此功能的限制是,指定的 URL 必須是未受保護的 URL,因為目前此功能不支援讀取受保護的 URL 來擷取 JWKS。
  • 進階選項
    • 最大規劃偏差 (秒):如果「API 閘道」與「身分識別提供者」在時間差異,此值可讓您調整記號有效期間時間,以嘗試調整兩個服務之間的時間。
    • :驗證內送權杖是否需要的宣告。例如 client_id 宣告或 user_id 宣告。

在 API 閘道中建立一個新的部署名稱並透過使用端點和 JWT 驗證,到達在先前步驟中建立的函數。在此範例中,建置的名稱為:my_jwt_test

  1. Oracle Cloud Infrastructure 主控台中,從 API 閘道頁面按一下其名稱,以選取作用中閘道。
  2. 資源下,選取部,然後選取建立部署
  3. 使用下列值設定「認證原則」:
    • 認證類型JWT
    • 認證記號標頭
    • 標頭名稱授權
    • 認證配置負擔者
    • 啟用匿名存取:啟用
  4. Oracle Identity Cloud Service 網域新增為允許的發照者,您就可以使用它作為權杖產生器。在發照者中,將允許的發照者設為 https://identity.oraclecloud.com/
  5. 新增受眾。將「允許對象」設定為您 Oracle Identity Cloud Service Oracle Functions 應用程式的 URL。例如,https://myinstance.apigateway.mydc.oci.customer-oci.com
    要驗證的受眾應該是產生的單詞必須能夠存取之資源的受眾。在此情況下,我們預期 Oracle Identity Cloud Service App 的權杖應用程式是 Oracle Functions Oracle Identity Cloud Service App 資源擁有者的從屬端,其主要對象具有 Oracle Functions Oracle Identity Cloud Service App 的資源範圍。
  6. 新增用於驗證內送 JWT 權杖的 JWK;遠端或靜態 jks。新增遠端 JWKS:
    1. 存取 Oracle Identity Cloud Service 主控台。
    2. 選取設定,然後選取預設設定
    3. 如果尚未啟用,請選取存取簽署憑證,接著按一下儲存,然後按一下
    4. 存取 Oracle Identity Cloud Service 執行處理的 jmk URL。例如:https://idcs-myinstance.identity.dc1.oraclecloud.com/admin/v1/SigningCert/jwk
    5. 驗證之後,您會見到 JWK URL,回到 API 閘道並設定公用金鑰。將類型設為遠端 JWKS,並將 URI 設為您剛剛驗證的 URL。
  7. 新增靜態 JWKS:
    1. 定義「靜態索引鍵」表單。若要這麼做,您必須要求讓 Oracle Identity Cloud Service 使用 j。您可以目前這麼做。分隔符號分隔),例如:
      ## Get access token to be able to invoke protected /admin/v1/SigningCert/jwk endpoint.
      # Clientid and ClientSecret should be from an existing IDCS Application in the stripe.
      #
      $ curl -X POST -u "<clientId>:<clientSecret>" https://idcs-myinstance.identity.dc1.oraclecloud.com/oauth2/v1/token -d "grant_type=client_credentials&scope=urn:opc:idm:__myscopes__"
       
       
      export jwtToken="<RETRIEVED_TOKEN>"
       
      ## Get JWK
      $ curl -X GET  https://idcs-myinstance.identity.dc1.oraclecloud.com/admin/v1/SigningCert/jwk -H "Authorization: Bearer ${jwtToken}"
       
      {
          "keys":[{
              "kty":"RSA",
              "x5t#S256":"<value>",
              "e":"<value>",
              "x5t":"<value>",
              "kid":"SIGNING_KEY",
              "x5c":["<value>"],
              "key_ops":["encrypt","verify","wrapKey"],
              "alg":"RS256",
              "n":"<value>"
          }]
      }
    2. Configure the Public Keys in API Gateway. Set the Type to Static Keys. Set the Key ID to SIGNING_KEY, and the Format to JSON Web Key. Paste in a JSON Web Key, using only the following subset of the values you got from Oracle Identity Cloud Service.
      「API 閘道」目前僅支援特定的 jwkk 金鑰特性。請使用 use 特性,而不使用 key_ops 特性。
      {
              "kty":"RSA",
              "e":"<value>",
              "kid":"SIGNING_KEY",
              "use":"sig",
              "alg":"RS256",   
              "n":"<value>"
      }
  8. 您也可以選擇在「驗證理賠」區段中新增其他驗證。新增 client_id 宣告,只允許與 Oracle Visual Builder 應用程式關聯的 Oracle Identity Cloud Service 應用程式值。如果您有多個 Oracle Visual Builder 應用程式,而且將使用數個 Oracle Visual Builder Oracle Identity Cloud Service Apps 來產生 OAuth 記號,您將需要將所有 Oracle Identity Cloud Service 從屬端 ID 新增至此驗證步驟。設定 client_id宣告索引鍵,輸入一或多個宣告值,然後選取必要核取方塊。
  9. 您也可以選擇設定 CORS 來允許來自指定網域的要求。例如,您可能需要將 Oracle Visual Builder 伺服器主機名稱當作允許的要求來源。將允許的來源設為您伺服器的 Url、對顯示標頭、允授權標頭啟用允許證明資料,以及允許的方法GET、POST
  10. 建立指向您函數的路由,例如函數 saasopportunitiesfn。將路徑設為 /assertion/facall方法設為 GETPOSTOracle Functions、確定 <區間>中的應用程式已選取正確的區間、將應用程式設為您的應用程式名稱 (例如 myapplication),以及將函數名稱設為您的函數名稱,例如 saasopportunitiesfn
儲存變更之後,您可以複查 API 閘道部署 my_jwt_test 有效負載的內容。

測試端點 REST 呼叫

若要測試新的端點 REST 呼叫,您可以使用 Postman 的 Get New Access Token 功能。

請注意,如果您在以下步驟中使用產生的記號,您將無法直接連線Oracle Fusion Applications Cloud Service 端點,因為記號是從Oracle Visual Builder產生的Oracle Identity Cloud Service App而且只能依據您先前設定的範圍,使用目前的組態連線Oracle Functions。此外,如果您使用不同的 Oracle Identity Cloud Service App 來產生記號,而且該應用程式沒有授權到達 Oracle Functions 資源範圍,API 閘道將不會允許要求 (將會傳回 401 錯誤),因為您已新增 Oracle Functions Oracle Identity Cloud Service 資源的目標對象。如果您已新增索賠從屬端 ID 驗證,API 閘道將只會確保記號只與指定的 Oracle Identity Cloud Service Apps client_ids 相符。

使用下列參數進行測試:

  • 授權類型:密碼證明資料 -此「授權類型」可用來確保提供的使用者名稱將會是產生之權杖中的主體。
  • 存取權杖 URL:您的 Oracle Identity Cloud Service 執行處理 OAuth URL。例如,https://idcs-myinstance.identity.dc1.oraclecloud.com/oauth2/v1/token
  • 使用者名稱:存在於 Oracle Identity Cloud ServiceOracle Fusion Applications Cloud Service 中且同時具有適當權限的使用者。
  • 密碼:輸入此使用者的密碼。
  • ClientId:Oracle Visual Builder 關聯之 Oracle Identity Cloud Service 從屬端 Oracle Functions 資源的 ID。
  • ClientSecret:與 Oracle Visual Builder 關聯之 Oracle Identity Cloud Service App Client Oracle Functions 資源的從屬端密碼
  • 範圍:此範圍應與 Oracle Functions Oracle Identity Cloud Service App 提供的資源相符。例如,https://myservice.apigateway.dc1.oci.customer-oci.com/saasextension
  1. 使用 Postman 和上列參數呼叫設定為指向您宣告器函數的路由。
  2. 或者使用 curl。分隔符號分隔),例如:
    curl --location --request GET 'https://myservice.apigateway.dc1.oci.customer-oci.com/saasextension/assertion/facall' \
    --header 'Authorization: Bearer <JWT_TOKEN>'
您應該從其中一個工具取得結果,類似於下列情況:
{
  "principal": "mary.jane",
  "gotPrincipalFrom": "BEARER",
  "statusCode": "200",
  "response": {
    "items": [],
    "count": 0,
    "hasMore": false,
    "limit": 25,
    "offset": 0,
    "links": [
      {
        "rel": "self",
        "href": "https://myfusionservice.fa.dc1.oraclecloud.com:443/fscmRestApi/resources/11.13.18.05/expenses",
        "name": "expenses",
        "kind": "collection"
      }
    ]
  }
}

選擇性地使用自訂認證建立 API 閘道部署

如果您選擇使用自訂「認證函數」來驗證「持有者記號」對「API 閘道端點」的內送呼叫,請使用此方法。

這是您在選擇性的「定義 Oracle Cloud Infrastructure 中的認證函數」段落後面加上位數時所定義的選擇性函數

  1. 若要建置 API 閘道,請從 API 閘道頁面按一下其名稱來選取作用中閘道。
  2. 資源底下,按一下建,然後按一下建立建置
  3. 使用「從頭開始」模式,按一下精靈來建置 API 閘道。
    您也可以選擇上傳建置定義檔案,如下所述。

下列程式碼片段是一個範例 Oracle Cloud Infrastructure API 部署規格 JSON 檔案、您可以使用此檔案進行部署、而非使用精靈。我們可以在此檔案內查看:

  • 第 1-8 行:認證要求原則。此定義指示此部署的任何要求、第一個呼叫此函數 (functionId)、傳送 tokenHeader、如果傳回 true、則繼續進行、否則請以 HTTP 未授權訊息回應。
  • 行 9-17:用來管理和控制交叉來源資源共用的 CORS 定義。
  • 第 18-43 行:FaaS 中的兩個 URL 進入點/VERlob 會轉換成個別功能。
{
    "requestPolicies": {
      "authentication": {
        "type": "CUSTOM_AUTHENTICATION",
        "isAnonymousAccessAllowed": true,
        "functionId": "OCID1.fnfunc.oc1.phx.xxxxxxxxxxxxxxx",
        "tokenHeader": "Authorization"
      }
      "cors":{ 
         "allowedOrigins": [<list-of-origins>], 
         "allowedMethods": [<list-of-methods>], 
         "allowedHeaders": [<list-of-implicit-headers>], 
         "exposedHeaders": [<list-of-exposed-headers>], 
         "isAllowCredentialsEnabled": <true|false>, 
         "maxAgeInSeconds": <seconds> 
      } 
    },
    "routes": [
      {
        "path": "/opportunities",
        "methods": [
          "GET"
        ],
        "requestPolicies": {},
        "backend": {
          "type": "ORACLE_FUNCTIONS_BACKEND",
          "functionId": "OCID1.fnfunc.oc1.phx.xxxxxxxxxxxxxxx"
 
        }
      },
      {
        "path": "/opportunities/{optyid}",
        "methods": [
          "PATCH"
        ],
        "requestPolicies": {},
        "backend": {
          "type": "ORACLE_FUNCTIONS_BACKEND",
          "functionId": "OCID1.fnfunc.oc1.phx.xxxxxxxxxxxxxxx"
        }
      }
    ]
  }
</seconds></true|false></list-of-exposed-headers></list-of-implicit-headers></list-of-methods></list-of-origins>