跳转到主要内容

Django的基于JSON Web Token的认证

项目描述

# Django JWT Auth

[![构建状态图像]][travis]
[![pypi版本]][pypi]

## 概述
此包提供了Django的[JSON Web Token认证](http://tools.ietf.org/html/draft-ietf-oauth-json-web-token)支持。

基于[Django REST Framework JWT Auth](https://github.com/GetBlimp/django-rest-framework-jwt)包。

## 安装

使用`pip`进行安装...

```
$ pip install django-jwt-auth
```

## 使用方法

在您的`urls.py`中添加以下URL路由,以通过包含用户的用户名和密码的POST请求启用获取令牌。

```python
urlpatterns = patterns(
'',
# ...

url(r'^api-token-auth/', 'jwt_auth.views.obtain_jwt_token'),
)
```

您可以通过在终端执行以下操作来轻松测试端点是否正常工作,如果有一个用户名为**admin**且密码为**abc123**的用户。

```bash
$ curl -X POST -H "Content-Type: application/json" -d '{"username":"admin","password":"abc123"}' https://127.0.0.1:8000/api-token-auth/
```

现在,为了访问受保护的api url,您必须包含`Authorization: Bearer <your_token>`头。

```bash
$ curl -H "Authorization: Bearer <your_token>" https://127.0.0.1:8000/protected-url/
```

## 其他设置
有一些其他设置可以覆盖,类似于您如何使用Django REST framework本身的方式。以下是所有可用的默认设置。

```python
JWT_ENCODE_HANDLER = 'jwt_auth.utils.jwt_encode_handler'
JWT_DECODE_HANDLER = 'jwt_auth.utils.jwt_decode_handler',
JWT_PAYLOAD_HANDLER = 'jwt_auth.utils.jwt_payload_handler'
JWT_PAYLOAD_GET_USER_ID_HANDLER = 'jwt_auth.utils.jwt_get_user_id_from_payload_handler'
JWT_SECRET_KEY: SECRET_KEY
JWT_ALGORITHM = 'HS256'
JWT_VERIFY = True
JWT_VERIFY_EXPIRATION = True
JWT_LEEWAY = 0
JWT_EXPIRATION_DELTA = datetime.timedelta(seconds=300)
JWT_ALLOW_REFRESH = False
JWT_REFRESH_EXPIRATION_DELTA = datetime.timedelta(days=7)
JWT_AUTH_HEADER_PREFIX = 'Bearer'
```
本包使用JSON Web Token的Python实现,[PyJWT](https://github.com/progrium/pyjwt),并允许修改其中的一些可用选项。

### JWT_SECRET_KEY
这是用于加密JWT的密钥。请确保它是安全的,不要共享或公开。

默认值是项目的`settings.SECRET_KEY`。

### JWT_ALGORITHM

可能值

> * HS256 - 使用SHA-256哈希算法的HMAC(默认值)
> * HS384 - 使用SHA-384哈希算法的HMAC
> * HS512 - 使用SHA-512哈希算法的HMAC
> * RS256 - 使用SHA-256哈希算法的RSASSA-PKCS1-v1_5签名算法
> * RS384 - 使用SHA-384哈希算法的RSASSA-PKCS1-v1_5签名算法
> * RS512 - 使用SHA-512哈希算法的RSASSA-PKCS1-v1_5签名算法

注意
> 对于RSASSA-PKCS1-v1_5算法,jwt.encode中的"secret"参数应是一个使用Crypto.PublicKey.RSA.importKey导入的私钥
> 同样,jwt.decode中的"secret"参数应是用相同方法导入的公钥。
> 默认值为`"HS256"`。

### JWT_VERIFY

如果密钥错误,它将抛出jwt.DecodeError并通知你。您可以通过设置`JWT_VERIFY`为`False`来获取有效载荷。

默认值为`True`。

### JWT_VERIFY_EXPIRATION

您可以通过将`JWT_VERIFY_EXPIRATION`设置为`False`来关闭过期时间验证。

### JWT_LEEWAY

### JWT_VERIFY_EXPIRATION

> 这允许您验证过去但不是非常远的过期时间。例如,如果您有一个过期时间设置为创建后30秒的JWT有效载荷,但您知道有时您会在30秒后处理它,您可以设置10秒的容错时间。

默认值为`0`秒。

### JWT_EXPIRATION_DELTA

这是Python的`datetime.timedelta`实例。这将添加到`datetime.utcnow()`来设置过期时间。
默认值为`datetime.timedelta(seconds=300)`(5分钟)。

### JWT_ALLOW_REFRESH

启用令牌刷新功能。由`rest_framework_jwt.views.obtain_jwt_token`签发的令牌将有一个`orig_iat`字段。默认值为`False`
### JWT_REFRESH_EXPIRATION_DELTA

令牌刷新的限制,是一个`datetime.timedelta`实例。这是从原始令牌之后可以刷新未来令牌的时间。
默认值为`datetime.timedelta(days=7)`(7天)。

### JWT_PAYLOAD_HANDLER

指定一个自定义函数来生成令牌有效载荷
### JWT_PAYLOAD_GET_USER_ID_HANDLER

如果您以不同于默认有效载荷处理程序的方式存储`user_id`,则实现此函数以从有效载荷中获取`user_id`。
### JWT_AUTH_HEADER_PREFIX

您可以修改需要与令牌一起发送的授权头值的前缀。
默认值为`Bearer`。

Default is `Bearer`.


[build-status-image]: https://secure.travis-ci.org/jpadilla/django-jwt-auth.svg?branch=master
[travis]: http://travis-ci.org/jpadilla/django-jwt-auth?branch=master
[pypi-version]: https://img.shields.io/pypi/v/django-jwt-auth.svg
[pypi]: https://pypi.python.org/pypi/django-jwt-auth

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

django-jwt-auth-0.0.2.tar.gz (7.4 kB 查看哈希)

上传于 来源

构建分发版

django_jwt_auth-0.0.2-py2.py3-none-any.whl (8.0 kB 查看哈希值)

上传于 Python 2 Python 3

由以下支持