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_CREDENTIALS | Azure 中使用 ManagedIdentityCredential;本地用 dev 或例如 AzureCliCredential |
AZURE_CLIENT_ID | 可选,Azure 中指定 user-assigned managed identity 的 client ID;未设时用 system-assigned |
FOUNDRY_RESOURCE_URL | Foundry 资源主机地址,示例在其后拼 /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。