rest_framework.authentication.BasicAuthentication
rest_framework.authentication.SessionAuthentication
rest_framework.authentication.TokenAuthentication
在Python/Django应用程序中实现JWT身份验证
不幸的是,Django REST框架没有内置的JWT身份验证系统,但是我们可以使用django-rest-framework-jwt软件包轻松地将其添加到我们的项目中,该软件包可以使用pip从PyPI安装。
$ pip install djangorestframework-jwt
接下来你需要添加: rest_framework_jwt.authentication.JSONWebTokenAuthentication
到DEFAULT_AUTHENTICATION_CLASSES
在项目$ settings.py
文件中的REST_FRAMEWORK
配置对象中:
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
),
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.TokenAuthentication',
'rest_framework.authentication.BasicAuthentication',
),
}
也可以使用JWT_AUTH
对象自定义djangorestframework jwt的各种设置,例如:
JWT_AUTH = {
'JWT_AUTH_HEADER_PREFIX': 'JWT',
'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=300)
}
接下来,你需要添加不同的URL,以便在JWT中使用urls.py
文件:
from django.conf.urls import url
from rest_framework_jwt.views import obtain_jwt_token
from rest_framework_jwt.views import refresh_jwt_token
from rest_framework_jwt.views import verify_jwt_token
urlpatterns = [
url(r'^auth-jwt/', obtain_jwt_token),
url(r'^auth-jwt-refresh/', refresh_jwt_token),
url(r'^auth-jwt-verify/', verify_jwt_token),
]
获取JWT令牌
可以通过向http://localhost:8000/jwt-auth/
端点发送用户名和密码的POST请求来获取令牌,来看一个使用curl的示例:
$ curl --request POST
--url http://localhost:8000/jwt-auth/
--header 'content-type: application/json'
--data '{"username":"myusername","password":"mypass"}'
{"token": "YOUR_JWT_TOKEN"}
发出API请求?
对于每个对受保护API资源的请求,你需要将获得的令牌附加到请求,并HTTP Authorization
标头,格式为:
`JWT <THE_TOKEN>`
前缀默认为'JWT ',但是如果您使用JWT_AUTH配置对象指定了另一个前缀:
JWT_AUTH = {
'JWT_AUTH_HEADER_PREFIX': 'Bearer',
}
你需要指定一个:
Bearer <THE_TOKEN>
使用curl,可以使用以下命令指定Authorization
头:
$ curl -H "Content-Type: application/json" -H "Authorization: Bearer YOUR_JWT_TOKEN" -X GET http://localhost:8000/api/protected/
恭喜您,您已经在使用Django和Django REST框架构建的Python Web应用程序中成功设置了JWT。
结束语
在本教程中,您已经了解了Python和Django中的JWT身份验证。您还看到了一个在Django REST框架应用程序中实现JWT的简单示例。