用于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第三方库


热门话题
CentOS上的java Spring Boot简易应用程序需要很长时间才能启动   java如何检查字符串值是否等于null?   收集器中的java映射值。分组方式()   java需要支持Azure AD B2C webapp集成   java如何加入线程以停止它?   java如何使用意图传递类的对象?   java如何在战争环境中发现CDI生产者?   多模块项目中java奇怪的编译器行为   java如何在web应用程序中管理密码?   java从http服务器、filehandler中删除冗余代码   java使用反射来获取泛型类的字段   java Spring MVC/Hibernate/MySQL 400错误请求错误   给定正整数a的java幂为3   在Java中将元素拆分为不同数量的列表?   java展开折叠窗格