使用 OAuth 2.0 授權和 Microsoft Entra 保護 Azure API 管理中的 API

適用於:所有 API 管理 層

在本文中,您將了解使用 OAuth 2.0 通訊協定與 Microsoft Entra ID,設定 Azure APIM 執行個體來保護 API 的概略步驟。

如需 API 授權的概念概觀,請參閱在 APIM 中對 API 進行驗證和授權

必要條件

依照本文中的步驟進行之前,您必須有:

  • API 管理執行個體
  • 使用 API 管理執行個體的已發佈 API
  • Microsoft Entra 租用戶

概觀

依照下列步驟,使用 OAuth 2.0 授權和 Microsoft Entra ID 保護 Azure APIM 中的 API。

  1. 在 Microsoft Entra ID 中註冊應用程式 (在本文中稱為後端應用程式),以保護對 API 的存取權。

    若要存取 API,使用者或應用程式會取得並呈現有效的 OAuth 權杖,並授與此應用程式的存取權,以及每個 API 要求。

  2. 在 API 管理中設定 validate-jwt 原則,以驗證每個傳入 API 要求中顯示的 OAuth 權杖。 有效的要求可以傳遞至 API。

OAuth 授權流程的詳細資料,以及如何產生必要的 OAuth 權杖,均已超出本文討論範圍。 一般而言,個別的用戶端應用程式是用來向 Microsoft Entra ID 取得權杖,以授權存取 API。 如需詳細資訊的連結,請參閱後續步驟

在 Microsoft Entra ID 中註冊應用程式來代表 API

使用 Azure 入口網站,透過先註冊代表 API 的應用程式,使用 Microsoft Entra ID 來保護 API。

如需應用程式註冊的詳細資訊,請參閱快速入門:設定應用程式以公開 Web API

  1. Azure 入口網站中,搜尋並選取應用程式註冊

  2. 選取新增註冊

  3. 在出現的 [註冊應用程式] 頁面中,輸入應用程式的註冊資訊:

    • 在 [名稱] 區段中,輸入將對應用程式使用者顯示、且有意義的應用程式名稱,例如 backend-app
    • 在 [支援的帳戶類型 ] 區段中,選取適合您情節的選項。
  4. 將 [重新導向 URI] 區段保持空白。

  5. 選取 [暫存器] 以建立應用程式。

  6. 在應用程式 [概觀] 頁面上,尋找 [應用程式 (用戶端) 識別碼] 值並將它記下供稍後使用。

  7. 在側邊功能表的 [管理] 區段下,選取 [公開 API],並使用預設值設定應用程式識別碼 URI。 如果您要開發個別的用戶端應用程式來取得 OAuth 2.0 權杖,以存取後端應用程式,請於稍後記錄此值。

  8. 選取 [新增範圍] 按鈕,以顯示 [新增範圍] 頁面:

    1. 輸入新的範圍名稱系統管理員同意顯示名稱,以及管理員同意描述
    2. 確定已選取 [已啟用] 範圍狀態。
  9. 選取 [新增範圍] 按鈕以建立範圍。

  10. 請重複上述兩個步驟,以新增 API 支援的所有範圍。

  11. 建立範圍後,請記下來,以供往後使用。

設定 JWT 驗證原則來預先授權要求

下列範例原則在新增至 <inbound> 原則區段時,會檢查從 Microsoft Entra ID 所取得存取權杖中的對象宣告值,其會顯示在 Authorization 標頭中。 若不是有效的權杖,則會傳回錯誤訊息。 在適合您案例的原則範圍內,設定此原則。

  • openid-config URL 中,aad-tenant 是 Microsoft Entra ID 中的租用戶識別碼。 例如,在 Azure 入口網站中,於 Microsoft Entra 資源的 [概觀] 頁面上,尋找此值。 顯示的範例假設有一個單一租用戶 Microsoft Entra 應用程式和一個 v2 設定端點。
  • claim 的值是您在 Microsoft Entra ID 中所註冊後端應用程式的用戶端識別碼。
<validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized. Access token is missing or invalid.">
    <openid-config url="https://login.microsoftonline.com/{aad-tenant}/v2.0/.well-known/openid-configuration" />
    <audiences>
        <audience>{audience-value - (ex:api://guid)}</audience>
    </audiences>
    <issuers>
        <issuer>{issuer-value - (ex: https://sts.windows.net/{tenant id}/)}</issuer>
    </issuers>
    <required-claims>
        <claim name="aud">
            <value>{backend-app-client-id}</value>
        </claim>
    </required-claims>
</validate-jwt>

注意

先前的 openid-config URL 會對應至 v2 端點。 針對 v1 openid-config 端點,請使用 https://login.microsoftonline.com/{aad-tenant}/.well-known/openid-configuration

如需如何設定原則的資訊,請參閱設定或編輯原則。 如需更多有關 JWT 驗證的自訂資訊,請參閱 validate-jwt 參考。 若要驗證 Microsoft Entra 服務提供的 JWT,APIM 也會提供 validate-azure-ad-token 原則。

授權工作流程

  1. 使用者或應用程式會從 Microsoft Entra ID 取得權杖,此權杖具有授與後端應用程式存取權的授權。

  2. 權杖會新增至對 API 管理之 API 要求的授權標頭中。

  3. API 管理會使用 validate-jwt 原則來驗證權杖。

    • 若要求並無有效的權杖,則 API 管理會封鎖該要求。

    • 如果要求伴隨有效的權杖,閘道可以將要求轉送至 API。

下一步