0. 问题描述
位置: 用户登录接口
描述: 通过模拟器将登录参数传给服务器, 客户端(模拟器)计算出来的签名与服务器计算出来的签名相同; 而通过手机, 客户端与服务器计算出来的签名不同.
现象就是: 模拟器登录, 签名验证成功, 手机登录, 签名验证失败
1. 问题原因
在登录参数中, 有一个参数的值在计算md5签名前使用了encodeurl方法.
这个导致了:
(1)通过模拟器传递参数, 对于字符串中的"+", "/"等之类的特殊符号, 传递给服务器后, 服务器收到后结果为替换后的符号(仍为encodeurl后的结果)
(2)通过手机传递参数, 那些特殊符号, 传递给服务器后, 服务器收到后结果为特殊符号(encodeurl之后重新解析的结果, 即原来的值)
2. 解决办法
对于可能含有特殊符号的参数值, 进行签名时用原来的值, 签名之后, 对于可能含有特殊符号的参数值, 根据平台判断是否使用encodeurl方法(若为android手机, 使用encodeurl方法; 其他不使用)
3. 感慨
这个问题也折腾了半天, 算是进步了.
终于知道项目登录接口代码里, 有的参数值是在签名之后根据平台决定是否使用encodeurl. 就是防止上面指出的这个问题.
网友评论