跳到正文
FunCoding

搜索

搜索文档、Skill 和 MCP

Azure Managed Identity 与 BYOK

以 Azure Identity 获取 Microsoft Entra token,并通过 provider 回调刷新。

Azure 托管应用可以用 Managed Identity 代替长期模型 API key。SDK runtime 请求 token,应用回调调用 Azure Identity;token 缓存与刷新时机由身份库处理。

TypeScript 依赖与回调

npm install @github/copilot-sdk @azure/identity

官方示例使用以下凭据链与 scope:

import { DefaultAzureCredential } from "@azure/identity";

const credential = new DefaultAzureCredential({
    requiredEnvVars: ["AZURE_TOKEN_CREDENTIALS"],
});
const getBearerToken = async () => {
    const tokenResponse = await credential.getToken("https://ai.azure.com/.default");
    return tokenResponse.token;
};

创建会话时,在 provider 中配置 type: "openai"、Foundry 的 /openai/v1/ endpoint、bearerTokenProvider: getBearerToken 和所需 wireApi,并显式指定实际部署的模型。

环境变量

变量设置
AZURE_TOKEN_CREDENTIALSAzure 中使用 ManagedIdentityCredential;本地用 dev 或例如 AzureCliCredential
AZURE_CLIENT_ID可选,Azure 中指定 user-assigned managed identity 的 client ID;未设时用 system-assigned
FOUNDRY_RESOURCE_URLFoundry 资源主机地址,示例在其后拼 /openai/v1/

这里不需要模型 API key 环境变量。身份仍需具备访问目标资源的权限,选择凭据类型并不自动授予模型访问。

语言与运行环境

.NET、Go、Java、Python 和 TypeScript 示例使用 DefaultAzureCredential,支持 Managed Identity、本地 Azure CLI、service principal 环境变量以及 Workload Identity。当前指南中的 Rust 采用本地 DeveloperToolsCredential 和 Azure ManagedIdentityCredential,不能照搬其他语言的配置链。

与静态 token 的区别

将当时取得的 token 复制到静态 bearerToken,不会获得同样的按需刷新行为。长期运行的服务应让 provider 回调调用身份库;token 失效和资源权限错误则按提供方响应处理,见BYOK。