Android_Ntlm库传入Domain域名触发Too many follow-up requests错误问题
错误原因
- 核心原因是传入的域名参数和服务端AD域配置不匹配,导致NTLM认证连续失败:每次请求服务端都返回401未授权状态码,OkHttp的Authenticator会自动触发重试,连续重试次数超过OkHttp内置的最大跟进请求阈值(默认20次)后就会抛出
Too many follow-up requests错误。 - 额外可能原因:你使用的Android_Ntlm库版本中,
NTLMAuthenticator构造参数顺序和你预期不符,比如部分旧版本第三个参数为工作站名,第四个才是域名,错误传参导致域字段实际值不符合要求,触发连续认证失败。 - 还有一种常见场景:NTLM的域字段对大小写敏感,多数AD域要求传入全大写的NetBIOS短域名,你传入的小写
ourdomain不符合服务端校验规则。
修复方案
- 首先确认服务端要求的域格式:如果是NetBIOS短域名需要保持全大写,比如改为
String userDomain = "OURDOMAIN";如果要求FQDN完整域名就传入对应完整地址,不要随便传简写值。 - 核对你使用的Android_Ntlm库版本的
NTLMAuthenticator构造参数定义,如果参数顺序是(用户名,密码,工作站名,域名),就把域名放到第四个参数位,第三个参数传空或者你的设备工作站名即可。 - 可以自定义认证逻辑避免无限重试:继承
NTLMAuthenticator加入重试计数器,连续重试超过3次就返回null终止认证,直接返回401结果方便你排查认证问题,不会触发次数超限报错。 - 如果你的服务端本身没有域校验要求(之前不传域名时运行正常),直接保持domain参数为null即可,不需要额外传入域名参数。
内容的提问来源于stack exchange,提问作者Evgeny Makhankov
相关产品推荐
相关产品推荐

