1. 文档
网络验证客户端
  • 网络验证安装文档
  • 文档
    • 系统使用文档
    • 接口文档
    • 错误码列表
    • 参数加密
    • 签名与验签
    • 使用云函数
  • 单码应用业务接口
    • 单码登录接口
      GET
    • 取单码信息(未登录)
      GET
    • 取单码信息(已登录)
      GET
    • 单码解绑
      GET
    • 执行云函数(已登录)
      GET
    • 修改绑定信息(已登录)
      GET
    • 单码心跳接口(已登录)
      GET
  • 账户密码应用业务接口
    • 用户注册
      GET
    • 用户充值
      GET
    • 用户登录
      GET
    • 取账户信息(未登录)
      GET
    • 用户解绑
      GET
    • 用户心跳接口(已登录)
      GET
    • 修改密码(未登录)
      GET
    • 修补绑定信息(已登录)
      GET
  • 公共接口
    • 取单码/账户的绑定值
      GET
    • 取程序公告
      GET
    • 取程序简介
      GET
    • 退出登录
      GET
    • 取程序版本更新
      GET
    • 下载文件接口
      GET
  1. 文档

签名与验签

为了方便理解,我们此处使用单码登录接口做示例
本章节主要介绍如何进行签名和验签

请求#

1. 用例一(基础示例)#

排序规则为&开头,=结尾的表示为请求参数(即 &card= 系统将在请求中获取card去排序)
假定您使用单码登录接口传入的参数为
{
    "card":"卡密",
    "machine":"机器码",
    "app_code":"应用编号",
    "timestamp":"10000000"
}
您可以在后台设置排序规则为&card=,&machine=,&timestamp=,&app_code=
则您需要在请求中添加参数signature=sha256(card=卡密&machine=机器码&tiemstamp=10000000&app_code=应用编号)
即将原参数按照您后台规定的顺序进行排序,参数之间使用&链接,然后对整体的字符串进行SHA256签名,并且附加在原参数后新增signature参数
则原请求变成了
    {
        "card":"卡密",
        "machine":"机器码",
        "app_code":"应用编号",
        "timestamp":"10000000",
        "signature":"9c1b276b0a0ae0b7ff97e888a234db99c98f5432d49a71e2d4cfc2feab653b9e"
    }
然后按照您设置的RSA加密规则进行加密即可

2.用例二(中级示例)#

在阅读中级示例之前请先彻底理解用例一
用例二将在用例一的基础上新增常量
您也可以直接写出一个常量例如单码登录,您的排序规则可以为
&card=,&machine=,helloworld,&timestamp=,app_code
则在进行签名的时候您的签名规则也就对应变成了signature=sha256(card=卡密&machine=机器码helloworld&tiemstamp=10000000&app_code=应用编号)
使用这样去动态的嵌入一个常量相比传统的使用app_key具有更高的安全性

响应#

用例一(基础示例)#

与请求相同,同样是指定参数签名顺序规则
假定您使用单码登录接口响应的参数为
{
    "code": 200,
    "msg": "登录成功",
    "data": {
        "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjY1NjIwMjcsImlzcyI6IkNvb2tpZVNvZnRXZWLlvIDlj5FR77yaMzEzMDg5NDEyNiIsInJlZGlzX2tleSI6InRlc3RKdWJiMzBObmVZNFlSMG9DelRncThOQ2Nya1hQOmg4MVRlRjZBIn0.K36F7-96v72-papRM8E0eFLhzYAnMh7Ervw0OhqTwSc"
    },
    "nonce": "",
    "signature": ""
}
您可以指定顺序为:&msg=,&code=,&nonce=,&token=
则签名为signature=sha256(msg=登录成功&code=200&nonce=&token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjY1NjIwMjcsImlzcyI6IkNvb2tpZVNvZnRXZWLlvIDlj5FR77yaMzEzMDg5NDEyNiIsInJlZGlzX2tleSI6InRlc3RKdWJiMzBObmVZNFlSMG9DelRncThOQ2Nya1hQOmg4MVRlRjZBIn0.K36F7-96v72-papRM8E0eFLhzYAnMh7Ervw0OhqTwSc)
响应则变为:
{
    "code": 200,
    "msg": "登录成功",
    "data": {
        "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjY1NjIwMjcsImlzcyI6IkNvb2tpZVNvZnRXZWLlvIDlj5FR77yaMzEzMDg5NDEyNiIsInJlZGlzX2tleSI6InRlc3RKdWJiMzBObmVZNFlSMG9DelRncThOQ2Nya1hQOmg4MVRlRjZBIn0.K36F7-96v72-papRM8E0eFLhzYAnMh7Ervw0OhqTwSc"
    },
    "nonce": "",
    "signature": "e76740af2b756bcc9389e5cdb406ac49f9f250b71bd1b8142bfe3062dea22d8d"
}
您可以在客户端对其验签来判断该响应是否由正确的服务端发送

2、用例二(中级示例)#

在阅读中级示例之前请先彻底理解用例一
用例二将在用例一的基础上新增常量
通请求用例二一样
使用&开头=结尾的参数可以用来表示响应中的参数
否则即表示常量
您可以指定顺序为:&msg=,&code=,&nonce=,helloworld,&token=
则签名字符串变为
signature=sha256(msg=登录成功&code=200&nonce=helloworld&token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjY1NjIwMjcsImlzcyI6IkNvb2tpZVNvZnRXZWLlvIDlj5FR77yaMzEzMDg5NDEyNiIsInJlZGlzX2tleSI6InRlc3RKdWJiMzBObmVZNFlSMG9DelRncThOQ2Nya1hQOmg4MVRlRjZBIn0.K36F7-96v72-papRM8E0eFLhzYAnMh7Ervw0OhqTwSc)

注意事项#

响应参数权重#

在响应中若存在多个可解析的相同字段但不同级 。例如:
{
    "code":200,
    "msg":"success",
    "data":{
        "msg":"test"
    },
    "nonce":"",
    "signature":""
}
"msg":'success' 和 "msg":"test" 系统将优先读取顶级的字段 即 "msg":'success'
也就是说,当您的响应规则为 &msg=...的时候,此处的msg为顶级的msg 即 "msg":'success'

签名顶级字段支持#

在所有的响应顶级字段中您仅仅可以使用code,msg,nonce

空字段#

若某个需要进行排序的字段为空
例如
排序规则为&card=,&machine=,&nonce=
请求参数为:
{
    "card":"单码卡密",
    "machine":"",
    "nonce":"123"
}
不要将空的参数删去
即您的签名字符串应该是signature=sha256(card=单码卡密&machine=&nonce=123)
而不是signature=sha256(card=单码卡密&nonce=123)
修改于 2024-09-29 08:29:04
上一页
参数加密
下一页
使用云函数
Built with