Microsoft OAuth2 /token端点始终返回错误码900144求助
解决Azure AD OAuth2获取Token时的AADSTS900144错误
问题描述
我正按照微软官方文档为应用添加OAuth2登录功能,已成功获取授权码,但请求/token端点时始终返回如下错误,提示请求体缺少grant_type参数。但官方文档要求将参数放在查询字符串中,我尝试过以下操作均无效:
- 将参数放在请求体
- 同时放在查询字符串和请求体
- 添加
Content-Type: application/x-www-form-urlencoded请求头 - 为Azure应用添加带尾斜杠的重定向URI
无论发送什么请求(无参数、虚假参数等),都会返回该错误,怀疑是微软的错误解析逻辑问题,该如何解决?
错误响应
{ "error": "invalid_request", "error_description": "AADSTS900144: The request body must contain the following parameter: 'grant_type'.\r\nTrace ID: ff270385-1331-498d-94a1-bcedad81d100\r\nCorrelation ID: d7d7cdd3-2994-4a41-b8b0-7aebca34e81b\r\nTimestamp: 2023-04-22 23:04:06Z", "error_codes": [ 900144 ], "timestamp": "2023-04-22 23:04:06Z", "trace_id": "ff270385-1331-498d-94a1-bcedad81d100", "correlation_id": "d7d7cdd3-2994-4a41-b8b0-7aebca34e81b", "error_uri": "https://login.microsoftonline.com/error?code=900144" }
解决方案
1. 强制使用POST请求并将参数放在请求体
Azure AD的/token端点仅支持POST请求,且必须将所有参数放在请求体中(而非查询字符串),即使文档可能有表述歧义。确保请求方法为POST,且参数以application/x-www-form-urlencoded格式编码,示例请求体如下:
grant_type=authorization_code&code=你的授权码&redirect_uri=你的重定向URI&client_id=你的客户端ID&client_secret=你的客户端密钥
2. 排查请求体编码格式
即使设置了Content-Type头,也要确认请求体不是JSON格式,必须是x-www-form-urlencoded的键值对形式。比如避免发送{"grant_type":"authorization_code"}这类JSON字符串。
3. 用工具直接测试排除代码问题
使用Postman或curl直接发送请求,排除应用代码或中间件的干扰:
curl -X POST "https://login.microsoftonline.com/{你的租户ID}/oauth2/v2.0/token" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "grant_type=authorization_code&code=你的授权码&redirect_uri=你的重定向URI&client_id=你的客户端ID&client_secret=你的客户端密钥"
4. 检查应用注册配置
- 确认
redirect_uri与Azure应用注册中的配置完全一致,包括大小写、是否带尾斜杠 - 在Azure门户的应用注册→认证→高级设置中,确保启用了授权码流
5. 处理特殊字符编码
如果授权码或重定向URI包含特殊字符,需进行URL编码,避免参数被截断或解析错误。
内容的提问来源于stack exchange,提问作者Rafael Bordoni
相关产品推荐
相关产品推荐

