本教程将介绍JSON Web令牌(JWT)以及如何在Django中实现JWT身份验证。
什么是JWT?
JWT是一个编码的JSON字符串,该字符串在标头中传递以验证请求。 通常是通过使用密钥对JSON数据进行散列来获得的。 这意味着服务器不需要每次都查询数据库来检索与给定令牌关联的用户。
JSON Web令牌如何工作
当用户使用其凭据成功登录时,将获取JSON Web令牌并将其保存在本地存储中。 每当用户想要访问受保护的URL时,都会在请求的标头中发送令牌。 然后,服务器在Authorization标头中检查有效的JWT,如果找到该JWT,将允许该用户访问。
典型的内容标头如下所示:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsI
下图显示了此过程:
认证和授权的概念
身份验证是标识已登录用户的过程,而授权是标识特定用户是否有权访问Web资源的过程。
API范例
在本教程中,我们将使用JWT作为身份验证机制在Django中构建一个简单的用户身份验证系统。
要求
- Django的
- Python
让我们开始吧。
创建一个目录,您将在其中保留您的项目,并在其中创建一个虚拟环境来安装项目依赖项。
- mkdir myprojects
-
- cd myprojects
-
- virtual venv
激活虚拟环境:
source venv/bin/activate
创建一个Django项目。
django-admin startproject django_auth
使用pip安装DRF和django-rest-framework-jwt。
- pip install djangorestframework
- pip install djangorestframework-jwt
- pip install django
让我们继续并将DRF添加到settings.py
文件中已安装应用程序的列表中。
配置JWT设置
为了使用JWT,我们需要配置django-rest-framework权限以接受JSON Web令牌。
在settings.py
文件中,添加以下配置:
- REST_FRAMEWORK = {
- 'DEFAULT_AUTHENTICATION_CLASSES': (
- 'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
- ),
- }
创建一个名为“用户”的新应用,该应用将处理用户身份验证和管理。
- cd django-auth
- django-admin.py startapp users
将用户应用程序添加到settings.py
文件中已安装应用程序的列表中。
设置数据库
我们将使用PostgreSQL数据库,因为它更加稳定和强大。
创建auth
数据库并分配用户。
通过输入以下命令切换到计算机上的Postgres帐户:
sudo su postgres
访问Postgres提示并创建数据库:
- psql
- postgres=# CREATE DATABASE auth;
创建一个角色:
postgres=# CREATE ROLE django_auth WITH LOGIN PASSWORD 'asdfgh';
向用户授予数据库访问权限: