用于http请求签名的hmac签名库

signit的Python项目详细描述


Build StatusCoverage StatusPyPI version

关于

signit是用于创建和验证hmac(hmac-sha256 by 默认值)可用于对API请求进行签名的签名。


用例

client端,您可以

  • 使用signit.signature.create()
  • 签署请求

server端,您可以

  • 使用 signit.signature.parse()
  • 使用signit.signature.verify()
  • 验证检索到的签名
  • 为客户端生成访问密钥和密钥 signit.key.generate()

使用示例(客户端)

importdatetimeimportrequestsimportsignitACCESS_KEY='MY_ACCESS_KEY'SECRET_KEY='MY_SECRET_KEY'defcreate_user(user:dict)->bool:msg=str(datetime.datetime.utcnow().timestamp())auth=signit.signature.create(MY_ACCESS_KEY,MY_SECRET_KEY,msg)headers={'Unix-Timestamp':msg,'Authorization':auth,}r=requests.post('http://example.com/users',json=user,headers=headers)returnr.status_code==201

授权标题将类似于

Authorization: HMAC-SHA256 MY_ACCESS_KEY:0947c88ce16d078dde4a2aded1fe4627643a378757dccc3428c19569fea99542

使用示例(服务器)

服务器已为您颁发了访问密钥和密钥。只有 你和服务器知道密钥。

以便服务器可以通过您的公共访问密钥和 确保使用密钥在中生成消息的哈希 这边:

# ...somewhere in my_api/resources/user.pyimportsignitfromaiohttpimportwebfrompsycopg2importIntegrityErrorasyncdefpost(request):message=request.headers['Unix-Timestamp']signature=request.headers['Authorization']prefix,access_key,hmac_digest=signit.signature.parse(signature)secret_key=awaitget_secret_key_from_db(access_key)ifnotsignit.signature.verify(hmac_digest,secret_key,message):raiseweb.HTTPUnauthorized('Invalid signature')try:awaitcreate_user(request)exceptIntegrityError:raiseweb.HTTPConflict()returnweb.HTTPCreated()

另外,如果使用Unix-Timestamp作为消息消息,则 服务器可以检查请求是否太旧,并使用401拒绝 防止“重放攻击”。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java mahout创建带有首选项的基于项目的推荐程序   java Maven:过滤任何资源   swing为什么Java中的侦听器相互依赖?   java在TextView中显示json响应   drjava从txt文件中检索一个随机字,但没有得到任何输出,也没有编译错误   JWindow上的java JPanel,添加组件   安卓使用jcocoa将ios代码转换为java   除非调整帧的大小,否则java动画不起作用   从java代码创建Json文件   java使用jdom向现有xml添加内容   如何在java中设置socket写超时?   java将值拆分为两个随机数