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

.NET Core Web API获取access token返回无效请求问题排查

错误说明

调用微软身份平台接口获取access token时返回如下错误:

Invalid request. Request is malformed or invalid. While trying to get the token.

现有代码的错误点
  • 请求头Content-Type拼写错误,当前写为aapplication/x-www-form-urlencoded,开头多了一个冗余的a,正确值为application/x-www-form-urlencoded,拼写错误会直接导致服务端无法识别请求格式。
  • code参数传值完全不符合要求:当前传入的固定字符串application/json是无效值,该参数需要传入授权码流程第一步用户登录完成后,微软返回的真实授权码,授权码有效期通常仅10分钟,且只能使用一次。
  • 重复发起请求:代码中连续两次调用client.Execute(request),如果授权码有效,第一次请求就会消费掉该授权码,第二次请求会因为授权码已被使用直接报错。
  • 超时配置不合理:设置client.Timeout = -1为无限等待,生产环境容易出现请求挂死问题,建议设置合理超时时间(如30秒)。
  • 端点与参数不匹配风险:当前使用的是Azure AD v1.0版本的/oauth2/token端点,如果你是在v2.0端点下注册的应用,需要将resource参数替换为scope参数,否则会报参数无效错误。
  • redirect_uri校验风险:该参数必须和Azure AD应用注册门户中配置的重定向URI完全一致,包括协议、域名、端口、路径,任何差异都会导致请求被拒绝。
修正后参考代码
[HttpPost("accessToken")]
public ActionResult GetToken([FromBody] TokenRequest requestParam)
{
    // 替换大括号内的租户ID,若为多租户应用可填common
    var client = new RestClient("https://login.microsoftonline.com/{替换为你的租户ID}/oauth2/v2.0/token");
    client.Timeout = 30000;
    var request = new RestRequest(Method.POST);
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");

    request.AddParameter("code", requestParam.AuthCode); // 传入真实有效的授权码
    request.AddParameter("client_id", "替换为你的应用client_id");
    request.AddParameter("client_secret", "替换为你的应用client_secret");
    request.AddParameter("redirect_uri", "替换为你在Azure门户配置的重定向URI");
    request.AddParameter("grant_type", "authorization_code");
    // v2.0端点使用scope参数,按需配置所需权限,v1.0端点可替换为resource参数
    request.AddParameter("scope", "https://graph.microsoft.com/.default");

    IRestResponse response = client.Execute(request);
    return Ok(response.Content);
}

// 自定义请求参数类,接收前端传入的授权码
public class TokenRequest
{
    public string AuthCode { get; set; }
}
测试注意事项
  • 测试前需要先构造授权请求,引导用户跳转至微软登录页面完成授权,拿到微软重定向回来的code参数后,再调用该接口换取token,不能跳过授权步骤直接传固定值。
  • 不需要手动设置Cookie请求头,RestSharp会自动处理请求的基础头信息,手动设置空Cookie反而可能导致请求异常。
  • Postman测试时,需要先通过浏览器完成授权流程拿到有效code,再将code传入接口,不能直接调用接口期待返回token。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:45:32