pythondjango JWT-djangorestframeworkjwt例子

分享于 

4分钟阅读

django

  繁體

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.JSONWebTokenAuthenticationDEFAULT_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的简单示例。


JWT  
相关文章