常见问题解决 --- 天翼云免密登录时签名失败 “-20005:签名非法”

发布时间 2023-05-24 21:00:56作者: GKLBB

问题现象

在安卓端编写好demo后,点击免密登录按钮,提示 “不支持免密登录”,跳转到了短信登录界面。但是没有错误提示。通过抓包工具抓取错误原因,我使用的是httpcadary。发现报错如下

 

问题原因

这里签名失败原因很多。

1、客户端用错了密钥或appid
2、安卓请确认包名和包签名没有在服务端配置
3、开放平台配置的安卓包签名未转化为大写的字母
4、android studio使用了v2版本签名而天翼免密登录使用的是v2签名

 

解决办法

我已经在平台配置了

首先使用天翼账验证工具为:
https://id.189.cn/source/files/configCheckTool.zip

 错误的原因是没有签名,但是apk肯定是有签名的。猜测可能是签名工具的问题。使用MT管理器查看签名信息没有问题是自己的jks文件,但是发现是v2签名。我是用mt内置的签名工具导入自己的签名并使用v1+v2共存签名。再次打开测试正常登录。与因此解决办法就是Android studio配置v1和v2签名即可。

配置如下

android {
       ...
       signingConfigs {
           // 正式版签名证书配置
           release {
               storeFile file("签名证书路径")
               storePassword "签名证书密码"
               keyAlias "签名别名"
               keyPassword "别名密码"
               v1SigningEnabled true
               v2SigningEnabled true
           }
           // 测试版签名证书配置
           debug {
               storeFile file("签名证书路径")
               storePassword "签名证书密码"
               keyAlias "签名别名"
               keyPassword "别名密码"
               v1SigningEnabled true
               v2SigningEnabled true
           }
       }

       buildTypes {
           release {
               signingConfig signingConfigs.release
               ...
           }
           debug {
               signingConfig signingConfigs.debug
               ...
           }
           ...
       }
   }


 

 

  

在  storeFile file("签名证书路径")  中,签名证书路径需要是存储签名证书文件的绝对路径或相对路径。

如果签名证书文件位于项目目录中,你可以在相对路径中指定该文件的位置。例如,如果签名证书文件在项目的根目录下,可以使用以下相对路径:

 
storeFile file("../my-app-key.keystore")
 

如果签名证书文件已经位于您的计算机的文件系统中,可以使用该文件的绝对路径:

 
storeFile file("/Users/myuser/Documents/my-app-key.keystore")
 

请根据您自己的情况调整签名证书路径。需要注意的是,为了确保签名证书的安全性,你应该保存签名证书的副本,并在多个计算机上保留不同位置的副本,以保证证书的备份和恢复。

 

 

 

 

 

 

 

下面是官方客服给给出的解决办法参考一下:

-20005:签名非法
产生原因:
客户端
1、客户端用错了密钥
2、安卓请确认包名和包签名是否在服务端配置
3、开放平台配置的安卓包签名未转化为大写的字母
4、iOS未在开放平台正确配置bundleId值
5、iOS误调用了TestBundleId方法
6、公钥的前缀或后缀未删除
解决办法:
1、可通过平台配置工具检查:
https://id.189.cn/source/files/configCheckTool.zip
2、安卓端,请确认服务端是否配置了包和包签名
3、检查开放平台的应用配置,将包签名转化为全部大写字母
4、IOS端,请确认服务端是否配置了bundleId
5、iOS端,勿调用TestBundleId方法
6、删除公钥前后缀
客户端预授权API形式
可能原因:
1、未按照签名规则加密(注:加密使用sha1而不是base64)
2、预授权接口公钥使用天翼账号提供的平台公钥而不是自己生成的公钥,下载地址:https://id.189.cn/api?initialSrc=/html/api_detail_621.html
3、参数名拼写错误
解决办法:
1、按照加密规则加密
2、使用平台公钥签名
3、纠正参数拼写

服务端
可能原因:
1、开放平台上是否配置正确的RSA公钥
2、RSA公钥和私钥是否匹配
3、是否遵循文档签名规则
4、入参字段英文拼写错误
5、请检查是否添加了规范之外的参数
解决办法:
1、确认是否在天翼账号平台配置公钥,验证工具为:
https://id.189.cn/source/files/configCheckTool.zip
2、检查RSA密钥是否匹配,检测工具为:https://id.189.cn/devtools/RSAVerify.do
3、按文档要求核对加密规则
4、检查每个字段英文是否拼写正确
错误码列表:
https://id.189.cn/api?initialSrc=/html/api_detail_455.html
常见问题解决办法:
https://id.189.cn/api?initialSrc=/html/api_detail_631.html