You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地开发C#应用:如何用Azure用户凭证模拟Azure应用注册身份?

如何用AzureCliCredential/VisualStudioCredential本地模拟Azure应用注册身份

可以实现,无需使用客户端密钥,核心是利用用户账户权限结合On-Behalf-Of (OBO)流程,用AzureCliCredential或VisualStudioCredential获取用户令牌后,以此为断言获取目标应用注册的身份令牌。具体操作如下:

1. 配置前置权限

  • 在Azure AD中,确保你的用户账户拥有代表目标应用注册获取令牌的权限:
    • 给用户分配Application Administrator角色(或更精细的权限,比如对目标应用注册的Impersonate权限);
    • 确认目标应用注册已开启OBO流程支持,且你的用户账户已被授予该应用对应资源的委托权限(根据实际访问需求调整)。

2. 代码实现

方式一:用AzureCliCredential结合OBO流程模拟应用身份

using Azure.Identity;
using Microsoft.Identity.Client;

// 1. 通过AzureCliCredential获取当前登录用户的令牌
var azureCliCredential = new AzureCliCredential();
var userToken = await azureCliCredential.GetTokenAsync(
    new Azure.Core.TokenRequestContext(new[] { "https://graph.microsoft.com/.default" }) // 替换为目标资源的权限范围
);

// 2. 基于用户令牌创建断言,用于OBO流程
var userAssertion = new UserAssertion(userToken.Token);

// 3. 初始化OnBehalfOfCredential,获取目标应用注册的身份令牌
var oboCredential = new OnBehalfOfCredential(
    tenantId,
    targetAppClientId, // 你要模拟的应用注册的Client ID
    userAssertion,
    new OnBehalfOfCredentialOptions { AuthorityHost = AzureAuthorityHosts.AzurePublicCloud }
);

// 4. 使用应用身份令牌访问目标资源
var httpClient = new HttpClient();
var appToken = await oboCredential.GetTokenAsync(new Azure.Core.TokenRequestContext(new[] { "https://management.azure.com/.default" }));
httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", appToken.Token);
// 发起资源请求...

方式二:直接用用户凭据访问资源(无需模拟应用身份)

如果你的用户账户本身拥有目标资源的访问权限,可直接跳过模拟步骤,用用户凭据访问:

var credential = new AzureCliCredential(); // 或 new VisualStudioCredential()
var httpClient = new HttpClient();
var token = await credential.GetTokenAsync(new Azure.Core.TokenRequestContext(new[] { "https://management.azure.com/.default" }));
httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token.Token);
// 发起资源请求...

注意事项

  • OBO流程要求用户令牌必须包含scp(委托权限)声明,否则无法获取应用身份令牌;
  • 本地需提前通过az login(Azure CLI)或Visual Studio登录到拥有对应权限的Azure账户;
  • 若出现权限报错,优先检查Azure AD中用户的角色分配和应用注册的权限配置是否正确。

内容的提问来源于stack exchange,提问作者Hans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 09:51:10