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

多租户场景获取Graph API AccessToken返回400错误排查

错误原因

你遇到的400错误核心是请求格式不匹配,附带代码语法问题,具体如下:

  • Content-Type与请求体格式不匹配:你在代码和Postman中都设置请求头Content-Type: application/x-www-form-urlencoded,但实际传入的请求体是JSON结构。Azure AD的v2.0令牌端点收到该类型请求头时,只会按照key1=value1&key2=value2的表单格式解析参数,完全无法识别JSON结构内的字段,因此返回缺少grant_type参数的错误。
  • C#代码存在语法与转义错误:
    1. postData字符串存在多余转义:\"\grant_type\":\"\\client_credentials\"片段多了无意义的反斜杠和转义引号,就算格式正确也会导致参数值非法
    2. postData赋值语句末尾缺少分号,httpRequest.Method = "POST";;多写了一个分号,属于语法瑕疵
  • Postman配置错误:选择了raw JSON模式传参,和声明的Content-Type类型不符。
修正方案

Postman侧修正

将Body的传参类型从raw - JSON切换为x-www-form-urlencoded,在表单中添加以下键值对即可:

  • grant_type: client_credentials
  • client_id: 65577dd2-cc76-46af-a1ac-71582eac6af2
  • scope: https://graph.microsoft.com/.default
  • client_secret: 你的应用实际客户端密钥值

C#代码侧修正

将JSON结构的请求体替换为标准表单格式字符串,修正语法错误,修正后的完整代码如下:

public static string AdminConsentAccessToken(string tenant, string state = "", string admin_concent = "")
{
    // 注意:如果密钥包含&、=等特殊字符,需要对每个参数值调用Uri.EscapeDataString()做转义
    string postData = "client_id=65577dd2-cc76-46af-a1ac-71582eac6af2&scope=https://graph.microsoft.com/.default&client_secret=my_client_secret&grant_type=client_credentials";
    string result = string.Empty;
    try
    {
        var httpRequest = (HttpWebRequest)WebRequest.Create($"https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token");
        httpRequest.Method = "POST";
        httpRequest.Accept = "application/json";
        httpRequest.ContentType = "application/x-www-form-urlencoded";
    
        using (var streamWriter = new StreamWriter(httpRequest.GetRequestStream()))
        {
            streamWriter.Write(postData);
        }
        var httpResponse = (HttpWebResponse)httpRequest.GetResponse();
        using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
        {
            result = streamReader.ReadToEnd();
        }
    }
    catch (Exception ex)
    {
        // 异常处理逻辑
    }
    return result;
}
注意事项

如果后续仍遇到权限相关错误,请确认:

  • 目标租户的管理员已经完成了对应应用的管理员同意流程
  • 应用配置的权限类型为应用程序权限(客户端凭据流仅支持应用程序权限,不支持委托权限)
  • 传入的client_secret值和Azure门户中应用注册页面生成的密钥完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:51:25