在範例情境中,主要應用程式使用一個第三方 API,並以存取金鑰保護。 本節示範使用 Azure Functions 的 API,但無論 API 如何或在哪裡實作,原則相同——無論你是在其他雲端服務商或傳統網頁伺服器上架設。
關鍵方面是,對受保護端點的任何用戶端要求都必須包含存取密鑰,應用程式必須安全地管理該密鑰。 本節提供如何使用 Azure Functions 實作這類 API 的概觀,但您可以調整原則以符合您的特定需求。
範例第三方 API 實作
第三方 API 範例是一個簡單的端點,會傳回介於 1 到 999 之間的隨機數。 API 是透過存取金鑰來保護的,您必須在請求時提供該金鑰才能存取端點。 為了示範目的,此 API 部署至端點 https://msdocs-example-api.azurewebsites.net/api/RandomNumber。 不過,若要呼叫 API,您必須在 URL 參數或 HTTP 標頭的 屬性中d0c5atM1cr0s0ft?code=提供存取密鑰'x-functions-key'。 例如,部署應用程式和 API 之後,請在瀏覽器或 curl 中嘗試此 URL: https://msdocs-example-api.azurewebsites.net/api/RandomNumber?code=d0c5atM1cr0s0ft。
如果存取金鑰有效,端點會傳回 JSON 回應,其中包含單一屬性 「value」,其值為介於 1 到 999 之間的數位,例如 {"value": 959}。
端點會在 Python 中實作,並部署至 Azure Functions。 程式代碼如下所示:
import logging
import random
import json
import azure.functions as func
def main(req: func.HttpRequest) -> func.HttpResponse:
logging.info('RandomNumber invoked via HTTP trigger.')
random_value = random.randint(1, 1000)
dict = { "value" : random_value }
return func.HttpResponse(json.dumps(dict))
在範例存放庫中,此程式代碼位於 third_party_api/RandomNumber/__init__.py 底下。 Folder RandomNumber 提供函式的名稱, __init__.py 包含程序代碼。 資料夾中的另一個檔案 ,function.json,描述何時觸發函式。 third_party_api父資料夾中的其他檔案會提供裝載函式本身之 Azure 函式應用程式的詳細數據。
若要部署程式代碼,範例的布建腳本會執行下列步驟:
使用 Azure CLI 命令建立 Azure Functions 的備份記憶體帳戶,
az storage account create以管理狀態和內部作業。使用 Azure CLI 命令
az function app create建立 Azure Functions 應用程式。等候 60 秒讓主機完全佈建之後,請使用 Azure Functions Core Tools 命令
func azure functionapp publish部署程式代碼。將存取金鑰
d0c5atM1cr0s0ft指派給 函式。 如需了解函式密鑰的背景,請參閱保護 Azure Functions。在布建腳本中,此步驟是使用 az functionapp function keys set Azure CLI 命令來完成。
包含批注,以示範如何視需要透過 REST API 呼叫函式密鑰管理 API 來執行此步驟。 若要呼叫該 REST API,必須先進行另一個 REST API 呼叫,才能擷取函式應用程式的主要密鑰。
您也可以透過 Azure 入口網站指派存取金鑰。 在 Functions 應用程式的頁面上,選取 [ 函式],然後選取要保護的特定函式(在此範例中命名 RandomNumber )。 在函式的頁面上,選取 [ 函式金鑰 ] 以開啟您可以建立和管理這些金鑰的頁面。