调用Microsoft Graph API Token接口:x-www-form-urlencoded转JSON遇错
Azure AD Token接口JSON请求体报错AADSTS900144的解决办法
根本原因
Azure AD的OAuth2 v2.0令牌端点(https://login.microsoftonline.com/{{AzuretenantID}}/oauth2/v2.0/token)不支持JSON格式的请求体,仅接受application/x-www-form-urlencoded编码格式。即使请求体中包含grant_type等必要参数,只要格式为JSON,端点就无法解析参数,因此返回AADSTS900144错误。
解决步骤
无论你的程序是否仅能构造JSON数据,都需要将请求参数转换为x-www-form-urlencoded格式后发送:
参数格式转换:将JSON中的键值对转换为
key=value拼接的字符串,注意对特殊字符(如client_secret中的~等)进行URL编码:grant_type=client_credentials&client_id=7721b276-c186-42e0-b81c-c8cf0bfc5f21&client_secret=Lu48Q%7E5SQ8ge6O2OXvsfYJJH-ga0DdHCNsgubaea&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default请求头配置:必须将请求头的
Content-Type设置为application/x-www-form-urlencoded,这是端点识别请求格式的核心要求。程序适配:如果你的程序只能生成JSON结构,需在发送请求前增加转换逻辑:
- 解析JSON对象提取键值对
- 将键值对序列化为
x-www-form-urlencoded格式字符串 - 替换原请求体为该字符串,并修改
Content-Type请求头
验证方法
在Postman中测试时,选择raw模式后,将格式下拉框从JSON切换为Text,粘贴转换后的x-www-form-urlencoded字符串,同时设置Content-Type头为application/x-www-form-urlencoded,即可成功获取认证令牌。
内容的提问来源于stack exchange,提问作者Abigayle Paulson
相关产品推荐
相关产品推荐

