美文网首页
Flutter适配钉钉机器人加签安全设置

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

作者: 杨闯 | 来源:发表于2019-11-14 13:28 被阅读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)
    

    相关文章

      网友评论

          本文标题:Flutter适配钉钉机器人加签安全设置

          本文链接:https://www.haomeiwen.com/subject/hekrictx.html