使用 Microsoft Entra ID 从 Azure 托管的应用向 Azure OpenAI 进行身份验证
本文演示如何使用 Microsoft Entra ID 托管标识 和 Microsoft.Extensions.AI 库 向 Azure OpenAI 资源验证 Azure 托管应用。
来自 Microsoft Entra ID 的托管标识允许应用轻松访问其他Microsoft受 Entra 保护的资源,例如 Azure OpenAI。 标识由 Azure 平台管理,不需要预配、管理或轮换任何机密。
先决条件
- 具有活动订阅的 Azure 帐户。 免费创建帐户。
- .NET SDK
- 创建和部署 Azure OpenAI 服务资源
- 创建 .NET 应用程序并将其部署到应用服务
将托管标识添加到应用服务
托管标识在 Microsoft Entra ID 中提供了一个自动托管标识,供应用程序在连接到支持 Microsoft Entra 身份验证的资源时使用。 应用程序可以使用托管标识来获取Microsoft Entra 令牌,而无需管理任何凭据。 可以为应用程序分配两种类型的标识:
- 系统分配的标识与你的应用程序相绑定,如果删除应用,标识也会被删除。 应用只能有一个系统分配的标识。
- 用户分配的标识是可以分配给应用的独立 Azure 资源。 应用可以有多个用户分配的标识。
将 Azure OpenAI 用户角色添加到标识
在 Azure 门户中,导航到想要授予 Azure OpenAI 访问权限的范围。 范围可以是 管理组、订阅、资源组,也可以是特定的 Azure OpenAI 资源。
在左侧导航窗格中,选择 访问控制(IAM)。
选择 添加,然后选择 添加角色分配。
在“角色”选项卡上,选择 认知服务 OpenAI 用户 角色。
在“成员”选项卡上,选择托管标识。
在“审阅 + 分配”选项卡上,选择 审阅 + 分配 来分配角色。
你可以使用 Azure CLI 在不同的范围将认知服务 OpenAI 用户角色分配给您的托管标识。
在应用代码中实现标识身份验证
将以下 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
上述包都处理此方案的以下问题:
- Azure.Identity:提供核心功能以使用 Microsoft Entra ID
- Azure.AI.OpenAI:使应用能够与 Azure OpenAI 服务进行交互
- Microsoft.Extensions.Azure:提供帮助程序扩展来注册依赖项注入服务
- Microsoft.Extensions.AI:为常见 AI 任务提供 AI 抽象
- Microsoft.Extensions.AI.OpenAI:使你能够将 OpenAI 服务类型用作 Microsoft.Extensions.AI 提供的 AI 抽象
在应用的
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 } );
创建 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));
注入注册的服务以在终结点中使用:
app.MapGet("/test-prompt", async (IChatClient chatClient) => { return await chatClient.CompleteAsync("Test prompt", new ChatOptions()); }) .WithName("Test prompt");
提示
详细了解 ASP.NET 核心依赖项注入以及如何在 Azure SDK for .NET 依赖项注入 文档中注册其他 AI 服务类型。
相关内容
- 向量数据库 对应用服务进行身份验证和授权
- 如何使用应用程序服务和 Azure Functions 的托管标识
- Azure OpenAI 服务的基于角色的访问控制