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
[![构建状态图像]][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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 14500d927fb83959e31371fd7df6dcde76b99011d3b0fc3f1849be373fb04532 |
|
MD5 | 3317ee9e1aa40ebb5d06c881900f68c9 |
|
BLAKE2b-256 | 8aacbbb1c3cb6d988222458c8268ca108b0229ea4ed93587dc5246b5c4f775b8 |
关闭
django_jwt_auth-0.0.2-py2.py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6925215e90a9e49da5352cbcb568a0087c8d385faeffa4f7963dad99e3c9b780 |
|
MD5 | e767a3528d4560db8d987ff9953c29f7 |
|
BLAKE2b-256 | a82945731bc1cdb42fe2970039764aaaf99bac62cf956d864f168270019c41c4 |