API接口安全认证

本文介绍API接口的安全性设计,包括Token授权、时间戳超时及Sign签名机制,确保数据传输过程中的完整性和有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考:
 
 
接口的安全性主要围绕Token、Timestamp、sign三种机制开展,保证接口的数据不被篡改和反复调用。
1、Token授权机制:
    Client使用用户名、密码成功登录后,Server返回给Client一个Token,并将Token-UserId以键值对的形式存放在缓存服务器上。Server接收到请求Request后进行Token验证,若Token不存在或不正确,则请求Request无效。
2、时间戳超时机制:
     Client每次请求都带上当前时间的时间戳timestamp,Server接收到timestamp后跟当前时间比对,若二者时间差大于一定时间,则认为该请求无效。时间戳超时机制是防御DDOS攻击的有效手段。
3、Sign签名机制:
     将口令Token、时间戳、加上其他请求参数,再用MD5或SHA-1算法加密,加密后的数据就是本次请求的签名sign;Server收到请求Request后以同样的算法得到签名,并跟当前的签名比对,若不同,则说明参数被更改过,请求非法,直接返回错误标识。签名机制保证了数据不会被篡改。
 
 
web页面要调用接口,需要使用几个参数生成签名:
时间戳timestamp:当前时间
随机数salt:随机生成的随机数
口令key:前后台开发时,一个双方都知道的标识,相当于暗号
算法规则:商定好的运算规则,上面三个参数可以利用算法规则生成一个签名sign。


原理:web页面调用接口时,把时间戳、随机数、生成的签名通过url传递到后台,后台拿到时间戳、随机数之后,通过一样的算法规则计算出签名,与传递来的签名比对,一样的话返回给web页面数据。
          安全的关键在于生成签名的口令key,整个过程中key是不参与通信的,所以只要保证key不泄露,请求就不会被伪造。

接口:http://api.test.com/getproducts?timestamp=201603261407&salt=267485898&sign=BCC7C71CF93F9CDBDB88671B701D8A35  或者将参数存在请求头header里


约定的算法规则:
1、时间戳、随机数、口令依次拼接成字符串
2、进行sha1加密再进行MD5加密
3、转大写,生成签名

 

代码:
import time
import uuid
import hashlib

class Sign(object):
    """
    生成签名的算法规则:
        1、时间戳、随机数、口令依次拼接成字符串
        2、进行sha1加密再进行MD5加密
        3、转大写,生成签名
    双方只需要私下定好口令key就可以了。时间戳、随机数可以以url参数?time_stamp=11112&salt="yyyyy"&sign="2323fhfgsh"这种方式传给我,也可以以请求头的方式传给我,口令不得出现在请求request中
    """
    key = "DSM-CTDI"

    def __init__(self, time_stamp, salt):
        self.time_stamp = time_stamp
        self.salt = salt

    def create_str(self):
        return " ".join([str(self.time_stamp), self.salt, self.key])

    def signature_create(self):
        strs = self.create_str()
        signature_sha1 = hashlib.sha1(strs.encode('utf-8')).hexdigest()       # 40位的16进制字符串
        signature = hashlib.md5(signature_sha1.encode('utf-8')).hexdigest()   # 32位的16进制字符串
        return signature.upper()

sign = Sign(int(time.time()), str(uuid.uuid1()))
signature = sign.signature_create()
print(signature)   # F55A6E88D1FC3D7A814DE65F4833DD2D

是否考虑将响应内容加密传输

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值