Aadhaar OTP认证返回Error Code 998问题排查求助
从你提供的响应和请求体来看,核心问题是请求参数不符合UIDAI测试环境的规范,导致签名或参数验证失败(err=998是通用的验证失败错误码)。下面是具体的问题点和修复建议:
1. 无效的时间戳(ts字段)
你的请求体里的ts值是0001-01-01T00:00:00,这是一个无效的默认值,UIDAI的API要求这个字段必须是当前的印度标准时间(UTC+5:30),精确到毫秒。这个错误会直接导致服务器拒绝请求,因为时间戳是签名验证的关键部分之一。
修复方法:
修改Program.cs中构建OTP请求的代码,将ts设置为当前的IST时间,比如:
var currentIstTime = DateTime.UtcNow.AddHours(5.5); // 在构建Otp对象时设置ts属性 otp.Ts = currentIstTime;
2. 签名算法与测试环境要求不匹配
你的请求签名使用的是rsa-sha1算法(从<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />可以看出),但UIDAI的测试环境现在要求使用SHA-256作为签名摘要算法。响应中的info字段已经包含SHA-256的哈希值,说明服务器期望的是SHA-256签名。
修复方法:
在项目中找到签名配置的代码,将签名方法和摘要方法改为SHA-256:
- 签名方法:
http://www.w3.org/2001/04/xmldsig-more#rsa-sha256 - 摘要方法:
http://www.w3.org/2001/04/xmlenc#sha256
3. 测试UID的有效性确认
你使用的UID是999999990026,虽然UIDAI提供了测试UID,但需要确认这个ID是否在当前测试环境的白名单中。如果不确定,可以替换为UIDAI官方文档中明确列出的测试UID(比如999999990001等)。
4. 接口端点的正确性
你的请求URL是http://developer.uidai.gov.in/otp/1.6/public/9/9/...,注意UIDAI的测试环境端点现在可能已经更新为HTTPS,HTTP请求可能会被拒绝或者重定向,导致验证失败。
修复方法:
将请求协议改为HTTPS,确保调用的是正确的测试环境端点。
按照以上步骤逐一排查修复,应该就能解决err=998的问题。
内容的提问来源于stack exchange,提问作者PavanKumar GVVS

