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

无ClientID的Azure用户名/密码认证:C#获取MS Graph令牌问题

在C#中实现Azure CLI式的用户名密码登录获取MS Graph令牌

为什么Azure CLI不需要手动指定clientID?

Azure CLI默认使用微软预注册的内置应用程序ID:04b07795-8ddb-461a-bbee-02f9e1bf7b46,所以你执行az login时无需手动传入该参数。

解决方案:使用UsernamePasswordCredential并指定内置clientID

将上述内置应用ID作为clientID参数传入UsernamePasswordCredential,即可模拟Azure CLI的登录逻辑,具体代码示例如下:

using Azure.Identity;
using Microsoft.Graph;

// 替换为你的租户ID、用户名和密码
var tenantId = "your-tenant-id";
var username = "myusername@mydomain.com";
var password = "mypassword";
// Azure CLI内置的应用程序ID
var azureCliClientId = "04b07795-8ddb-461a-bbee-02f9e1bf7b46";

// 初始化凭据
var credential = new UsernamePasswordCredential(
    username,
    password,
    tenantId,
    azureCliClientId
);

// 创建MS Graph客户端
var graphClient = new GraphServiceClient(credential);

// 示例:调用Graph API获取当前用户信息
var currentUser = await graphClient.Me.GetAsync();
Console.WriteLine($"已登录用户:{currentUser.DisplayName}");

注意事项

  • 该方式仅支持**未启用多因素认证(MFA)**的账户,启用MFA的账户会直接认证失败。
  • 确保目标用户拥有访问MS Graph的对应权限(与Azure CLI中可获取令牌的权限一致)。
  • UsernamePasswordCredential使用的是资源所有者密码凭据(ROPC)流,安全性较低,微软不推荐在生产环境使用,优先考虑交互式登录、客户端凭据等更安全的认证方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 09:07:06