共用方式為


使用 Microsoft Entra ID 從 Azure 裝載的應用程式向 Azure OpenAI 進行驗證

本文示範如何使用 Microsoft Entra ID 受控識別Microsoft.Extensions.AI 連結庫 向 Azure OpenAI 資源驗證 Azure 裝載的應用程式。

來自 Microsoft Entra ID 的受控識別可讓您的應用程式輕鬆地存取其他Microsoft Entra 受保護的資源,例如 Azure OpenAI。 身分識別是由 Azure 平臺所管理,不需要您布建、管理或輪替任何秘密。

先決條件

新增受管理的身分識別至 App Service

受管識別在 Microsoft Entra ID 中提供一個自動管理的識別,讓應用程式在連接到支援 Microsoft Entra 驗證的資源時使用。 應用程式可以使用受控識別來取得Microsoft Entra 令牌,而不需要管理任何認證。 您的應用程式可以指定兩種類型的身分識別:

  • 系統指派的身分識別 會系結至您的應用程式,若您的應用程式遭到刪除,它也會被刪除。 應用程式只能有一個系統指派的身分識別。
  • 使用者指派的身分識別 是可指派給應用程式的獨立 Azure 資源。 應用程式可以有多個使用者指派的身分識別。
  1. 前往 Azure 入口網站 中的應用程式頁面,然後向下捲動至 [設定] 群組。

  2. 選取 [身分識別]。

  3. 在 [系統指派] 索引卷標上,將 [狀態] 切換為 [開啟],然後選取 [儲存]

    顯示如何將系統指派的受控識別新增至應用程式的螢幕快照。

    注意

    上述螢幕快照示範在 Azure App Service 上的此過程,但步驟與其他主機類似,例如 Azure Container Apps。

執行 az webapp identity assign 命令來建立系統指派的身分識別:

az webapp identity assign --name <appName> --resource-group <groupName>

將 Azure OpenAI 使用者角色新增至身分識別

  1. Azure 入口網站中,流覽至您想要授與 Azure OpenAI 存取權的範圍。 範圍可以是 管理群組訂用帳戶資源群組,或 Azure OpenAI 資源的特定

  2. 在左側瀏覽窗格中,選取 [存取控制 (IAM)]

  3. 選取 新增,然後選取 新增角色分配

    顯示如何新增 RBAC 角色的螢幕快照。

  4. 在 [角色] 索引標籤上,選取 [認知服務 OpenAI 使用者 角色]。

  5. 在[成員] 標籤上,選取受管理的身份識別。

  6. 在 [檢閱 + 指派] 索引標籤上,選擇 [檢閱 + 指派] 以分配角色。

您可以使用 Azure CLI 將認知服務 OpenAI 使用者角色指派給您的受控識別,並在不同的範圍中應用。

az role assignment create --assignee "<managedIdentityObjectID>" \
--role "Cognitive Services OpenAI User" \
--scope "/subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>/providers/<providerName>/<resourceType>/<resourceSubType>/<resourceName>"

在應用程式程式代碼中實作身分識別驗證

  1. 將下列 NuGet 套件新增至您的應用程式:

    dotnet add package Azure.Identity
    dotnet add package Azure.AI.OpenAI
    dotnet add package Microsoft.Extensions.Azure
    dotnet add package Microsoft.Extensions.AI
    dotnet add package Microsoft.Extensions.AI.OpenAI
    

    前述套件在此情境中會處理下列問題:

  2. 在應用程式的 Program.cs 檔案中,建立 DefaultAzureCredential 物件來探索及設定可用的認證:

    // For example, will discover Visual Studio or Azure CLI credentials
    // in local environments and managed identity credentials in production deployments
    var credential = new DefaultAzureCredential(
        new DefaultAzureCredentialOptions
        {
            // If necessary, specify the tenant ID,
            // user-assigned identity client or resource ID, or other options
        }
    );
    
  3. 建立 AI 服務,並將它註冊到服務集合:

    string endpoint = builder.Configuration["AZURE_OPENAI_ENDPOINT"];
    string deployment = builder.Configuration["AZURE_OPENAI_GPT_NAME"];
    
    builder.Services.AddChatClient(
        new AzureOpenAIClient(new Uri(endpoint), credential)
        .AsChatClient(deployment));
    
  4. 插入已註冊的服務以用於您的端點:

    app.MapGet("/test-prompt", async (IChatClient chatClient) =>
    {
        return await chatClient.GetResponseAsync("Test prompt", new ChatOptions());
    })
    .WithName("Test prompt");
    

    提示

    深入瞭解 ASP.NET Core 相依性插入,以及如何在 Azure SDK for .NET 相依性插入 文件中註冊其他 AI 服務類型。