为保证数据传输的安全,授客学堂事件订阅及免登场景需要对交互数据进行加解密。
为了降低加解密对接的难度,避免合作双方都重复造轮子,我们采用了业内使用比较广泛的钉钉开源加解密解决方案。
官方SKD和Demo
文档中提到的token, encodingAesKey, ownerKey分别对应授客学堂开放平台提供的callback_token、callback_secret_key、app_id
加密数据后会返回4个字段:
加密的JSON消息体
{
"msg_signature":"e802c00e011cf677668f20a8bf1d681a9066bbc7",
"encrypt":"2sA+\/i7+tnZhouraUeldQ5dwnJ9K1xFUtur8aybY5kclObpe3mCpUsctILSCDL\/z+l1CNMwPuHEyUwhf3lMMNd2IQhVKa3SB8CeVyGW\/6BiD9httSIk7KLJ\/BjuFc8kTCtXS\/l7aYG8Ea4cC2WQq1Bw62YLMdrLS9fTAxPiZ2NVtMvypFpYBboR1PXxVdr7uMaJcyEb1eZvB\/A0bjqSrS0aNXDZYmi6AlSF3Q4KlVctciw1OX9WxnfvkbzQwDk0FQqQxlUkKR+QEw7i5MN4v3YARPcC8GIh1jfFTEuo5rB8KXakbzsLJeVrpmJ7sGoegXvnrPKUnPlntgnWHmQu5IQ==",
"timeStamp":1618453647,
"nonce":"oLWdCnoO4YZQGUoO"
}
解密后
{
"company_id":"dingbidetu",
"event_action":"learn_start",
"course_id":"3701236331520018",
"lesson_id":"370733440013",
"dept_user_id":"3141543358",
"event_time":"1618453646395"
}
需要将'success'字符串进行加密,返回加密后的JSON字符串
加密前
success
加密后
{
"msg_signature":"111108bb8e6dbce3c9671d6fdb69d1506xxxx",
"encrypt":"1ojQf0NSvw2WPvW7LijxS8UvISr8pdDP+rXpPbcLGOmIxxxx",
"timeStamp":"1783610513",
"nonce":"z1laobdllOEW0Vb7"
}
在免登场景中,对要免登的用户JSON格式数据进行加密,然后将加密结果和加密签名拼接在免登URL中
待加密用户信息
{
"dept_user_id": "zhangshan",
"dept_user_name": "张三",
"position": "产品经理",
"dept_ids":"1,23,102"
}
加密后
{
"msg_signature":"8aa03a9281105ec13509636690ed461cbd316521",
"encrypt":"G1+8V4N1GP1DJRFWRzHXI4VzPFTKgU9BJjB0qbX9SJjsfjON4ImG21EzjyySS\/88e5pxv5AoAiUdjdLTGGCEGCP+zSlwKaEzAzttH1xMvGOt1d4PMvOQqbzrEAUnY+ydaneQRS7PUQuu7dFQdgVv6UiciERokiHxjuOsACcokY2XiD6VIWxOqFxuiwjFoIr1rqIBaPQd8QkGAalQ6Y0LXZDl0J+Njc\/QOvtz4CykohCCFlj1i4x\/tR144ux\/vztjceF3A9TSRI4CKBeezQRWpjtv7wpiEHS94Eg4Mv5gQuInMvUNn58GS+bMvl8SFNWqzeKwr+2fvFP14Kp+R1vWzQ8Cm38m2EhOWPk09PuC3CfTgNomJuRwrPBwzkL5nOADLxufkKBSFAF5OMJacNUuHK1yDlH68jbIUSJMRheglik=",
"timeStamp":1618453269,
"nonce":"XDTpkvBtdZbULn4q"
}
将加密返回的信息对应拼接到免登URL参数中,对应关系如下:
| URL字段 | 对应的加密JSON字段 |
|---|---|
| sign | msg_signature |
| ticket | encrypt |
| timestamp | timeStamp |
| nonce | nonce |
JAVA可能会报java.security.InvalidKeyException: Illegal key size异常
解决方案请参照:下载JCE无限制权限策略文件