跳转到主要内容

临时Django REST Framework权限范围令牌

项目描述

Build Status Requirements Status

rest_framework_tmp_scoped_token提供了一款与Django REST Framework兼容的系统,用于生成和验证签名授权令牌。生成的令牌包含代表令牌持有者进行认证的用户ID、允许访问的HTTP动词和API端点的白名单、令牌的最大有效期以及关于预期接收者的备注。

用法

授权

rest_framework_tmp_scoped_token.TokenAuth添加到settings.pyREST_FRAMEWORK设置的DEFAULT_AUTHENTICATION_CLASSES部分

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        # ... Your other forms of auth
        'rest_framework_tmp_scoped_token.TokenAuth',
    )
}

要使用临时权限令牌进行认证,请将令牌包含在以下任一位置:

  • 带有TmpToken关键字的Authorization HTTP头

    Authorization: TmpToken eyJzb21ldGhpbmctc2VjcmV0IjoiaG9wZSBub2JvZHkgc2VlcyB0aGlzIn0:1d47N6:woJG0EgLNDb0OjYQmCbsjniP-2Y
  • TOKEN GET查询参数

    /api/?TOKEN=eyJzb21ldGhpbmctc2VjcmV0IjoiaG9wZSBub2JvZHkgc2VlcyB0aGlzIn0:1d47N6:woJG0EgLNDb0OjYQmCbsjniP-2Y

如果您想自定义Authorization头关键字或使用的GET查询参数,可以继承rest_framework_tmp_scoped_token.TokenAuth类并重写keywordget_param值。

令牌

要生成令牌,请使用rest_framework_tmp_scoped_token.TokenManager类。令牌包含以下信息

  • user:将被令牌认证的用户。

  • endpoints:令牌授权访问的HTTP方法和端点根的键值对。以下值将授权令牌对以“api/v1/foo”开头的任何端点进行GET请求。

    {'GET': ['/api/v1/foo']}

    注意:此令牌不会覆盖系统内关联用户的所有现有权限。它仅对可以访问的端点添加额外的限制。

  • max_age:令牌有效的秒数。默认情况下,令牌将有效期为1小时。不支持非过期令牌。

  • 接收者: (可选) 对于此令牌的接收者提供的文本描述。对此数据不进行验证,但由伴随的DRF认证方案将其作为X-API-Token-Recipient头信息附加到请求中。这是为了跟踪目的。

注意:令牌通过Django的`signing` <https://docs.django.ac.cn/en/dev/topics/signing/>功能进行签名。重要的是要知道令牌未加密,只是进行了签名。因此,您不应在令牌中包含任何敏感/机密信息。例如,注意查看签名字符串内容是多么容易。

In [1]: from django.core import signing

In [2]: t = signing.dumps({'something-secret': 'hope nobody sees this'})

In [3]: print(t)
eyJzb21ldGhpbmctc2VjcmV0IjoiaG9wZSBub2JvZHkgc2VlcyB0aGlzIn0:1d47N6:woJG0EgLNDb0OjYQmCbsjniP-2Y

In [4]: import base64

In [5]: print(base64.urlsafe_b64decode(t.encode('utf8')))
b'{"something-secret":"hope nobody sees this"}5w\x8e\xcd\xeb\n\t\x1bA ,\xd0\xdb\xd0\xe8\xd8B`\x9b\xb29\xe2?\xed\x98'

贡献

测试

pip install -r requirements-test.txt
./runtests

部署

pip install -r requirements-deploy.txt
python setup.py test clean build tag publish

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面