在自动化账户中使用用户选定的托管标识获取Databricks访问令牌
为托管标识请求访问令牌的方法
托管标识属于特殊类型的服务主体,它没有可手动导出的client_secret,因此无法直接套用服务主体的client_credentials授权流程。需要通过Azure提供的专属机制获取令牌,常见场景如下:
1. 在Azure资源内部运行时(如VM、App Service、Function等)
使用**Azure实例元数据服务(IMDS)**的专属端点请求令牌,这是生产环境中最常用的方式,无需手动配置任何凭据:
请求示例(curl)
curl -H "Metadata: true" \ "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/"
参数说明
Metadata: true:必须添加的请求头,用于验证请求来自Azure资源内部resource:指定目标服务的资源ID(例如Azure管理API为https://management.azure.com/,需根据实际访问需求替换)- 若使用用户分配的托管标识,需额外添加
client_id参数指定标识ID:curl -H "Metadata: true" \ "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/&client_id=<你的用户分配托管标识ID>"
2. 本地开发/测试场景
如果需要在本地模拟托管标识获取令牌,可以使用Azure CLI快速实现:
步骤1:登录并切换到目标订阅
az login az account set --subscription <你的订阅ID>
步骤2:获取访问令牌
# 系统分配托管标识 az account get-access-token --resource https://management.azure.com/ # 用户分配托管标识,需指定标识ID或名称 az account get-access-token --resource https://management.azure.com/ --identity <用户分配托管标识ID/名称>
3. 代码中集成托管标识
推荐使用Azure官方SDK(如Azure.Identity库),它会自动适配运行环境,无需手动调用IMDS端点:
C#示例
using Azure.Identity; using Azure.Core; var credential = new DefaultAzureCredential(); var tokenRequestContext = new TokenRequestContext(new[] { "https://management.azure.com/.default" }); AccessToken token = await credential.GetTokenAsync(tokenRequestContext);
说明
DefaultAzureCredential会自动检测运行环境:在Azure资源内部时使用托管标识,在本地时使用Azure CLI、Visual Studio等已登录的凭据,适配跨环境开发需求。
内容的提问来源于stack exchange,提问作者Ken
相关产品推荐
相关产品推荐

