本地开发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
相关产品推荐
相关产品推荐

