Skip to content
This repository has been archived by the owner on Aug 17, 2021. It is now read-only.

LuCatIsFun/django-request-sign

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

django-request-sign

对django请求进行签名效验

安装

pip install django-request-sign

使用

request_sign.middleware.RequestSignMiddleware 放置到中间件第一位

# django settings
MIDDLEWARE = [
    'request_sign.middleware.RequestSignMiddleware',
    ...
    ...
]

前端支持与示例

需要在header头中增加的参数,这里以axios作为参考,前端签名参考示例js文件

实际使用前请不要忘了删除示例文件中输出的日志信息

参数 说明
timestamp 请求时间戳
nonce 请求ID(随机生成)
sign 本次请求签名

配置参数

配置参数 说明 类型 默认值 示例
SIGNATURE_DEBUG 开启DEBUG调试 Boolean False True/False
ENABLE_REQUEST_SIGNATURE 是否开启 Boolean False True/False
SIGNATURE_SECRET 签名秘钥 Str None e6QGz7AhFzFAFsR9jYoCUnZGsqDrQI
SIGNATURE_ALLOW_TIME_ERROR 允许请求时间前后误差 Int 600 600
SIGNATURE_RESPONSE 签名不通过返回方法 Str request_sign.utils.default_response you_project.you_app.file.function
SIGNATURE_PASS_URL 不需要验证签名的url List [] ['/api/v1/mcn/content/download']
SIGNATURE_PASS_URL_REGULAR 不需要验证签名的url正则 List [] ['/app/*']
SIGNATURE_METHOD 效验请求类型 List ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace'] ['get']
NONCE_CACHE_KEY 唯一性检查缓存key名称 Str "django_request_sign_nonce_{nonce}" "test_{nonce}"
参数说明:SIGNATURE_RESPONSE
from django.http import HttpResponse

# request_sign.utils.default_response
def default_response():
    """
        Must return django HttpResponse type
    :return: HttpResponse
    """
    return HttpResponse()

request_sign.utils.default_response 方法默认返回http状态码为200的空信息,你可以自行实现一个返回函数,更改 SIGNATURE_RESPONSE配置 即可,但请一定注意,自行实现的函数一定要返回一个django的HttpResponse对象,否则django会异常。

参数说明:SIGNATURE_PASS_URL

在此名单中的请求地址将不会效验签名,如http://example.com/a/b/c?p=1 填写:/a/b/c即可,主机与请求参数不用填写

  1. 在urls.py中配置name属性 re_path('content/download', views.DownloadContent.as_view(), name='DownloadContent'),配置中填写name值即可(推荐)
  2. 直接写url(不推荐)
参数说明:NONCE_CACHE_KEY

传入的key名称会以format函数解析,所以你必须在字符串中包括{nonce} 请求唯一性检查需要设置django-redis,每次请求都会插入一个key来判断唯一性,如果没有安装django-redis则此配置无效

参考

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published