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

开发环境如何获取AzureAD访问令牌?云端应用代码仅Azure生效

我来给你分享几个在开发环境里获取Azure AD访问令牌的实用方案,刚好能替代Azure App Service自动注入的X-MS-TOKEN-ADD-ACCESS-TOKEN:

开发环境获取Azure AD访问令牌的几种方案

1. 用Azure CLI快速拿令牌(最省心的调试方式)

这是本地调试最快捷的方法,不需要改代码,手动复制令牌就行:

  • 先确保你装了Azure CLI,然后登录到你的Azure租户:
    az login
    
  • 运行下面的命令,替换{api-client-id}为你要访问的API的客户端ID,{tenant-id}为你的Azure AD租户ID:
    az account get-access-token --resource {api-client-id} --tenant {tenant-id}
    
  • 命令输出里的accessToken字段就是你要的Bearer令牌,调试时把它手动加到请求头的X-MS-TOKEN-ADD-ACCESS-TOKEN里,或者临时替换代码里的tokenHeader值就行。

2. 集成MSAL让代码自动获取令牌(适合长期开发)

如果你不想每次手动复制,可以在代码里加环境判断,开发环境自动用MSAL生成令牌:

  • 先装MSAL的NuGet包(以.NET项目为例):
    Install-Package Microsoft.Identity.Client
    
  • 修改你的OnActionExecuting方法,加入开发环境的逻辑:
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        base.OnActionExecuting(context);
        _client.DefaultRequestHeaders.Accept.Clear();
    
        var isDevelopment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") == "Development";
        if (isDevelopment)
        {
            // 开发环境用MSAL交互式登录获取令牌
            var clientId = "你的本地应用客户端ID";
            var tenantId = "你的Azure AD租户ID";
            // 替换为你要访问的API的权限范围,一般是api://{api-client-id}/.default
            var scopes = new[] { "api://your-api-client-id/.default" };
    
            var msalApp = PublicClientApplicationBuilder.Create(clientId)
                .WithAuthority($"https://login.microsoftonline.com/{tenantId}")
                .Build();
    
            // 弹出登录窗口,登录后拿到令牌
            var authResult = msalApp.AcquireTokenInteractive(scopes)
                .ExecuteAsync().GetAwaiter().GetResult();
    
            _client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", authResult.AccessToken);
        }
        else
        {
            // 生产环境沿用Azure注入的令牌逻辑
            var tokenHeader = Request.Headers["X-MS-TOKEN-ADD-ACCESS-TOKEN"];
            _client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", tokenHeader);
        }
    }
    

    提示:如果是无界面的开发环境(比如CI/CD或后台服务),可以换成AcquireTokenForClient客户端凭据流,但需要给你的Azure AD应用配置客户端密钥或证书,并且授予API的应用权限。

3. 用Postman模拟请求(接口测试专用)

如果你用Postman调接口,可以直接在Postman里配置Azure AD认证:

  • 在请求的Headers里,添加Authorization字段,类型选Bearer Token。
  • 点击Get New Access Token,填写这些参数:
    • Token Name:随便起个名字就行
    • Grant Type:选Authorization Code
    • Callback URL:填https://oauth.pstmn.io/v1/callback
    • Auth URL:https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/authorize
    • Access Token URL:https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/token
    • Client ID:你的应用客户端ID
    • Scope:api://{api-client-id}/.default
  • 点Request Token,登录后就能拿到令牌,Postman会自动帮你加到请求头里。

几个关键注意点

  • 你的本地开发应用必须在Azure AD里注册过,并且已经给它配置了目标API的访问权限(记得要授予管理员同意,否则拿不到令牌)。
  • 不同的认证流对应不同场景:交互式流适合本地开发调试(需要用户登录),客户端凭据流适合后台服务(不需要用户参与),授权码流适合模拟真实用户的请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:43:37