zoukankan      html  css  js  c++  java
  • 接口的鉴权&响应数据解密

    前言:

    1、开放的接口为了避免被别人攻击,频繁刷接口,浪费服务器资源,这就涉及到签名(Signature)加密了

    2、API 使用签名方法(Signature)对接口进行鉴权(Authentication)。每一次请求都需要在请求中包含签名信息, 以验证用户身份。

    一、我们的接口请求:

    1、登录的url + key(一段已知的字符串) + get请求带上固定参数(有一个变动的时间戳)拼接成新的请求链接

    2、拼接之后的链接通过 hashlib.md5 加密

    3、加密之后的数据就是鉴权ydtoken

    5、再把这个ydtoken传到每个接口请求的参数里面去,请求才能成功    

    二、鉴权的代码操作

    # -*- coding:utf-8 -*-
    from common import commons
    import readConfig as readConfig
    import hashlib
    
    
    localReadConfig = readConfig.ReadConfig()
    
    
    class getAuthentication(object):
    
        def  get_Url(self,xlse_name,name,row=0,col=1):
            '''
            从excel里面获取登录的url,账号和密码,然后 url+固定参数,拼接成新的请求链接URL
            '''
            api_v = localReadConfig.get_http('api')
            local_xls = commons.get_xls(xlse_name,name)
            url = local_xls[row][col]
            par = self.add_par()
            get_url = '/'+api_v+url + "?" + par
            return get_url
    
    
        def add_par(self):
            # 固定参数:时间戳+固定参数,拼接成 a=1&b+2&c=3 的模式
            fixed_parameter= localReadConfig.get_parameters()
            list_a=[]
            for key in dict(fixed_parameter):
                list_a.append( key+'='+fixed_parameter[key])
                list_b = '&'.join(list_a)
            return list_b
    
        def get_ydtoken(self,url):
            # 拼接之后的链接URL + 固定字符串 就行md5 加密,生成鉴权数据
            # print((md5str))
            key = "固定字符串"
            new_md5str = key + url
            # print(new_md5str)
            byte_md5str = bytes(new_md5str, encoding="utf8")   #必须传byte
            ydtoken =hashlib.md5(byte_md5str).hexdigest()
            return ydtoken

    运行后的结果:

    三、fiddler抓看响应时间,是加密后的数据,需要使用base64解密

    代码操作

      def get(self):
            try:
                r = requests.get(self.url, headers=self.headers, params=self.params, timeout=float(timeout))
                print(r.url)
                result = decodeToBase64(r.content) #decodeToBase64封装了解密方法,每个公司都会做一些改动,就不贴出来了
                response = json.loads(result)
                # response.raise_for_status()
                return response
            except TimeoutError:
                self.logger.error("Time out!")
                return None

    解码之后:

  • 相关阅读:
    楷书四大家
    什么叫同学?
    css悬浮在页面顶端
    jq给页面添加覆盖层遮罩的实例
    jQuery实现遮罩层
    jQuery实现的文字逐行向上间歇滚动效果示例
    jquery实现文字由下到上循环滚动的实例代码
    Js/Jquery获取网页屏幕可见区域高度
    本机无法访问虚拟机配置的域名
    thinkphp5+GatewayWorker+Workerman
  • 原文地址:https://www.cnblogs.com/guo2733/p/10543045.html
Copyright © 2011-2022 走看看