后端使用nodejs开发,node版本v10.16.0。
废话不多说直接上干货~~~~~~
首先看一下钉钉官方文档中的钉钉签名例子:
- timestamp=1546084445901
- appSecret=testappSecret
- signature=HCbG3xNE3vzhO+u7qCUL1jS5hsu2n5r2cFhnTrtyDAE=
- urlEncode后的signature=HCbG3xNE3vzhO%2Bu7qCUL1jS5hsu2n5r2cFhnTrtyDAE%3D
现在要做的就是根据钉钉官方给出的例子,加密之后能够匹配的上。
在上代码之前,需要引入的包文件:
1、crypto包:用于加密签名,我用的版本是:1.0.1
2、urlencode包:用于转换密文,我用的版本:1.1.0
下方是代码段:
const crypto = require('crypto');
const urlencode = require('urlencode');
//这个是请求钉钉签名接口的参数 let requestData = { tmp_auth_code:code }; //官方例子中的时间戳 let timestamp="1546084445901"; //官方例子中的appSecret码 let appSecret="testappSecret"; //设置appSecret为"sha256"加密的密钥 let hash_256 = crypto.createHmac("sha256",appSecret); //对时间戳进行加密,并使用“base64”输出 let signature = hash_256.update(new Buffer(timestamp).toString("utf8"),'utf8').digest("base64"); console.log("加密结果:",signature); //对加密密文进行urlEncode转化【之所以对密文要转换,是担心密文中有非法字符】 let urlSignature =urlencode(signature); console.log("urlencode转换:",urlSignature);
到这里,对官方给出的示例进行签名加密就结束了。加密的结果和官方示例中是一样的。
来源:https://www.cnblogs.com/shendaxian/p/12580193.html