Flutter适配钉钉机器人加签安全设置

2019-11-14  本文已影响0人  杨闯

近期发现钉钉机器人添加了安全设置,需要用户必须在自定义关键词、加签、ip地址(段)中选择一个,为了后期更好的使用,我选择加签这个方案,对于方案的具体描述,可详见 https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq

在flutter开发过程中,如果需要适配钉钉机器人的加签安全策略,可以参考以下我的实际开发样例进行修改,完全可以进行使用。
首先需要在pubspec.yaml的dependencies下添加 crypto: ^2.1.3
并在使用的dart文件中进行引用 import 'package:crypto/crypto.dart';

static sign() {
    int timeStamp = DateTime.now().millisecondsSinceEpoch;
    String stringToSign =  timeStamp.toString() + "\n" + dingtalkSecret;
    var key = utf8.encode(dingtalkSecret);
    var bytes = utf8.encode(stringToSign);
    var hmacSha256 = new Hmac(sha256, key);
    var digest = hmacSha256.convert(bytes);
    var signBase64 = base64.encode(digest.bytes).toString();
    return "&timestamp=" + timeStamp.toString() + "&sign="+Uri.encodeComponent(signBase64);
}

如果要验证所传递的数据是否正确,可以通过Python跑一下进行验证

import time
import hmac
import hashlib
import base64
import urllib

timestamp = long(round(time.time() * 1000))
secret = '1111111'
secret_enc = bytes(secret).encode('utf-8')
string_to_sign = '{}\n{}'.format(timestamp, secret)
string_to_sign_enc = bytes(string_to_sign).encode('utf-8')
hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
print(base64.b64encode(hmac_code))
sign = urllib.quote_plus(base64.b64encode(hmac_code))
print(timestamp)
print(sign)
上一篇下一篇

猜你喜欢

热点阅读