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

Java获取Azure OAuth2令牌报错(错误码900144)求助

排查Azure OAuth2授权码模式Java代码900144错误的核心方向

Azure的900144错误码本质是请求体格式/内容不符合要求,结合你Postman能正常获取令牌的前提,重点从以下几个维度核对代码:

1. 强制匹配Postman的请求头与参数编码

  • 必须明确设置请求头Content-Type: application/x-www-form-urlencoded,不能用application/json或其他类型,这是OAuth2令牌接口的硬性要求
  • 对code(授权码)、redirect_uri(回调地址)这类可能含特殊字符的参数做URL编码,比如Java中用URLEncoder.encode(param, "UTF-8")处理,避免因字符未编码导致请求体解析失败

2. 核对参数的完整性与准确性

  • 确保参数名完全符合规范:client_id、client_secret、code、redirect_uri、grant_type(固定值authorization_code),注意大小写不能错
  • 检查redirect_uri必须和Azure门户配置的完全一致,包括协议(HTTP/HTTPS)、末尾斜杠、域名路径,任何细微差异都会触发错误
  • 禁止重复添加参数,比如代码中多次调用params.add("client_id", xxx)会导致请求体冗余,触发900144

3. 修正请求体提交方式

不要把参数拼在URL的Query部分,必须以表单键值对的形式放入请求体。比如用RestTemplate的正确写法:

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);

MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
params.add("client_id", "你的ClientId");
params.add("client_secret", "你的ClientSecret");
params.add("code", "获取到的授权码");
params.add("redirect_uri", "你的回调URL");
params.add("grant_type", "authorization_code");

HttpEntity<MultiValueMap<String, String>> entity = new HttpEntity<>(params, headers);
RestTemplate restTemplate = new RestTemplate();
String tokenResponse = restTemplate.postForObject("你的AccessTokenUrl", entity, String.class);

4. 对比Postman请求日志定位差异

  • 在Java代码中打印完整请求的URL、Headers、请求体内容
  • 打开Postman的"Console"查看成功请求的详情,对比两者的参数顺序、编码方式、头信息,通常能直接找到不一致的地方

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 17:12:11