美高梅开户-美高梅官方网站开户

您的位置:美高梅开户 > 美高梅开户 > 分享api接口验证模块,获得13位unix时间戳的方法

分享api接口验证模块,获得13位unix时间戳的方法

发布时间:2019-08-31 22:36编辑:美高梅开户浏览(50)

    Python 得到十伍位unix时间戳的法子,python15个人

    在python 开采web程序时,需求调用第三方的有关接口,在调用时,需求对央浼举行签订左券。需求用到unix时间戳。
    在python里,在网络介绍的不知凡几艺术,获得的时日戳是十人。而java里暗中同意是15人(milliseconds,飞秒级的)。

    下边介绍python获得时间戳的措施:

    1、10时间戳获取形式:

    >>> import time
    >>> t = time.time()
    >>> print t
    1436428326.76
    >>> print int(t)
    1436428326
    >>> 
    

    强制转变是直接去掉小数位。

    2、14个人时间戳获取方式:

    (1)暗中同意情状下python的年月戳是以秒为单位输出的float

    >>> 
    >>> import time
    >>> time.time()
    1436428275.207596
    >>> 
    

    通过把秒转变皮秒的方法获得14人的时刻戳:

    import time
    millis = int(round(time.time() * 1000))
    print millis
    

    round()是四舍五入。

    (2)

    import time
    
    current_milli_time = lambda: int(round(time.time() * 1000))
    Then:
    >>> current_milli_time()
    1378761833768
    

    如上正是本文的全部内容,希望对大家的上学抱有帮助,也可望大家多多匡助帮客之家。

    得到13位unix时间戳的办法,python16人在python 开荒web程序时,要求调用第三方的连锁接口,在调用时,须求对央求举办具名。供给用到...

    美高梅开户 ,一.前言

      权限验证在付出中是断断续续遇上的,经常也是包装好的模块,假设大家是使用者,平时指需求三个标识天性只怕配备一下就足以产生,但实在里面恐怕有众多事物值得我们去探寻。一时候大家也会用一些开源的权限验证框架,可是能自个儿达成二回就更加好,自身付出的事物成就感(逼格)会更加高级中学一年级些。步向正题,本篇首假设介绍接口端的权能验证,那么些局地每一个项目都会用到,所以最佳就是也把它插件化,放在Common中,新的种类就可以直接行使了。基于web的证实以前也写过这篇,风乐趣的看一下ASP.NET MVC Form验证。

    二.简介

      对于大家系统来讲,提供给外界访谈的点子有各类,举个例子通过网页访问,通过接口访谈等。对于不一样的操作,访谈的权能也不一致,如:

    1. 可平素访谈。对此部分别获得取数据操作不影响系统寻常运转的和数码的,多余的验证是从未要求的,这一年能够平昔访谈,举个例子获取当天的天气预先报告音信,获取网址的计算音讯等。

    2. 依据表单的web验证。对此网址来讲,有个别网页须要我们登入才足以操作,http诉求是无状态,客户每趟操作都登陆一遍也是不容许的,今年就供给将顾客的登入状态记录在某些地点。基于表单的求证平时是把登入新闻记录在Cookie中,Cookie每一回会随央求发送到服务端,以此来拓宽验证。比方天涯论坛,会把登入音讯记录在二个名为.CNBlogsCookie的Cookie中(F12可去掉cookie观望效果),那是一个透过加密的字符串,服务端会议及展览开解密来获取有关音讯。当然固然进行加密了,但央浼在网络上传输,凭借或然被窃取,应对那或多或少,平常是使用https,它会对供给实行非对称加密,即使被窃取,也心余力绌直接拿走大家的恳求音信,大大提升了安全性。能够看出和讯也是依赖https的。

      3. 基于签名的api验证。对于接口来讲,访谈源只怕有相当多,网址、移动端和桌面程序都有希望,这一年就不能够透过cookie来兑现了。基于具名的认证措施理论很简短,它有多少个至关心重视要的参数:appkey, random,timestamp,secretkey。secretkey不随诉求传输,服务端会维护一个appkey-secretkey 的集纳。比如要询问顾客余额时,央求会是相仿:/api/user/querybalance?userid=1&appkey=a86790776dbe45ca9032fc59bbc351cb&random=191×tamp=14826791236569260&sign=09d72f207ba8ca9c0fd0e5f8523340f5 

    参数深入分析:

      1.appkey用于给服务端找到相应的secretkey。有时候大家会分配多对appkey-secretkey,比如安卓分一对,ios分一对。

      2.random、timestamp是为着防范重播攻击的(Repaly Attacks),那是为了制止央浼被窃取后,攻击者通过深入分析后破解后,再度发起恶意要求。参数timestamp时间戳是必得的,所谓时间戳是指从1969-1-1至当下的总秒数。我们显著三个时辰,比方20分钟,当先20分钟便是过期,假使当前时刻与那几个小时戳的区间超越20分钟,就拒绝。random不是必需的,但有了它也能够越来越好制止重播攻击,理论上的话,timestamp random应该是独一的,那年大家得以将其视作key缓存在redis,要是通过供给的timestamp random能在规定期间获得到,就不肯。这里还会有个难题,顾客端与服务端时间不相同步如何是好?那几个能够须要客商端考订时间,大概把过期时光调大,举个例子30分钟才算过期,再也许能够行使网络时间。防止重放攻击也是很常见的,比如你能够把手提式无线电话机时刻调到较早前三个光阴,再采用手提式有线电话机银行,那年就可以接收error了。

     3.sign签名是由此自然准则变化,在此处自身用sign=md5(httpmethod url timestamp 参数字符串 secretkey)改变。服务端接收到要求后,先经过appkey找到secretkey,举办同样拼接后开展hash,再与诉求的sign进行比较,不平等则不容。这里需求静心的是,尽管大家做了十分多工作,但照旧无法阻止央浼被窃取;小编把timestamp参加到sign的变化,因为timestamp在呼吁中是可知的,恳求被窃取后它完全能够被涂改并再一次提交,要是大家把它加入到sign的退换,一旦修改,sign也就分歧等了,进步了安全性。参数字符串是透过必要参数拼接生成的字符串,指标也是看似的,幸免参数被歪曲。举个例子有多少个参数a=1,b=3,c=2,那么参数字符串=a1b3c2,也能够透过将参数按值进行排序再拼接生成参数字符串。

      使用例子,前段时间恰辛亏利用友盟的新闻推送服务,能够看到它的签订公约生成准绳如下,与我们介绍是类似的。

    美高梅开户 1

    三.编码达成

      这里还是经过Action Filter来实现的,具体能够看经过源码明白ASP.NET MVC 三种Filter的实施进度介绍。通过地点的简要介绍,这里的代码虽多,但很轻易精通了。ApiAuthorizeAttribute 是标志在Action大概Controller上的,定义如下

        [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]    public class ApiAuthorizeAttribute : ApiBaseAuthorizeAttribute    {        private static string[] _keys = new string[] { "appkey", "timestamp", "random", "sign" };        public override void OnAuthorization(AuthorizationContext context)        {            //是否允许匿名访问            if (context.ActionDescriptor.IsDefined(typeof(AllowAnonymousAttribute), false))            {                return;            }            HttpRequestBase request = context.HttpContext.Request;            string appkey = request[_keys[0]];            string timestamp = request[_keys[1]];            string random = request[_keys[2]];            string sign = request[_keys[3]];            ApiStanderConfig config = ApiStanderConfigProvider.Config;            if(string.IsNullOrEmpty            {                SetUnAuthorizedResult(context, ApiUnAuthorizeType.MissAppKey);                return;            }            if (string.IsNullOrEmpty(timestamp))            {                SetUnAuthorizedResult(context, ApiUnAuthorizeType.MissTimeStamp);                return;            }            if (string.IsNullOrEmpty            {                SetUnAuthorizedResult(context, ApiUnAuthorizeType.MissRamdon);                return;            }            if(string.IsNullOrEmpty            {                SetUnAuthorizedResult(context, ApiUnAuthorizeType.MissSign);                return;            }            //验证key            string secretKey = string.Empty;            if(!SecretKeyContainer.Container.TryGetValue(appkey, out secretKey))            {                SetUnAuthorizedResult(context, ApiUnAuthorizeType.KeyNotFound);                return;            }            //验证时间戳(时间戳是指1970-1-1到现在的总秒数)                  long lt = 0;            if (!long.TryParse(timestamp, out lt))            {                SetUnAuthorizedResult(context, ApiUnAuthorizeType.TimeStampTypeError);                return;            }            long now = DateTime.Now.Subtract(new DateTime(1970, 1, 1)).Ticks;            if (now - lt > new TimeSpan(0, config.Minutes, 0).Ticks)            {                SetUnAuthorizedResult(context, ApiUnAuthorizeType.PastRequet);                return;            }            //验证签名            //httpmethod   url   参数字符串   timestamp   secreptkey            MD5Hasher md5 = new MD5Hasher();            string parameterStr = GenerateParameterString;            string url = request.Url.ToString();            url = url.Substring(0, url.IndexOf;            string serverSign = md5.Hash(request.HttpMethod   url   parameterStr   timestamp   secretKey);            if(sign != serverSign)            {                SetUnAuthorizedResult(context, ApiUnAuthorizeType.ErrorSign);                return;            }        }        private string GenerateParameterString(HttpRequestBase request)        {            string parameterStr = string.Empty;            var collection = request.HttpMethod == "GET" ? request.QueryString : request.Form;            foreach(var key in collection.AllKeys.Except            {                parameterStr  = key   collection[key] ?? string.Empty;            }            return parameterStr;        }    }
    

      上边会对这段基本代码实行剖释。ApiStanderConfig包装了有的配置音讯,举个例子地点大家提及的晚点时间是20分钟,但大家意在得以在模块外界举办自定义。所以通过贰个ApiStanderConfig来包装,通过ApiStanderConfigProvider来注册和获得。ApiStanderConfig和ApiStanderConfigProvider的定义如下

        public class ApiStanderConfig    {        public int Minutes { get; set; }    }  
    
        public class ApiStanderConfigProvider    {        public static ApiStanderConfig Config { get; private set; }        static ApiStanderConfigProvider()        {            Config = new ApiStanderConfig()            {                Minutes = 20            };        }        public static void Register(ApiStanderConfig config)        {            Config = config;        }    }
    

      后边介绍到服务端会维护四个appkey-secretkey的会晤,这里透过贰个SecretKeyContainer达成,它的Container正是贰个字典集结,定义如下

        public class SecretKeyContainer    {        public static Dictionary<string, string> Container { get; private set; }        static SecretKeyContainer()        {            Container = new Dictionary<string, string>();        }        public static void Register(string appkey, string secretKey)        {            Container.Add(appkey, secretKey);        }        public static void Register(Dictionary<string, string> set)        {            foreach(var key in set)            {                Container.Add(key.Key, key.Value);            }        }    }
    

      能够看到,上面有为数非常多的尺度推断,况且错误会有例外的叙述。所以笔者定义了贰个ApiUnAuthorizeType错误类型枚举和DescriptionAttribute标识,如下:

    本文由美高梅开户发布于美高梅开户,转载请注明出处:分享api接口验证模块,获得13位unix时间戳的方法

    关键词: 美高梅开户

上一篇:【美高梅开户】绘图入门篇

下一篇:没有了