1. 认证:
获取权限的方式
2. 授权:
通过认证后可以获取哪些特权
3. drf中的认证授权方式:
3.1 默认使用SessionAuthentication,会话认证,AllowAny,授权所有
3.2 在全局配置文件settings.py文件中的REST_FRAMEWORK={}指定该配置类
# 指定drf中能用的各种解析器,渲染器,过滤引擎,搜索引擎,排序引擎,分页引擎等
REST_FRAMEWORK = {
# 指定使用的认证类
# a. 在全局指定的认证类(认证方式)
'DEFAULT_AUTHENTICATION_CLASSES': [
# 指定为session会话认证
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.BasicAuthentication'
],
# 指定使用的权限类
# a. 在全局指定的默认权限类(当认证通过后,可以获取何种权限)
'DEFAULT_PERMISSION_CLASSES': [
# AllowAny 不管是否认证成功,都能获取所有权限
# IsAdminUser 管理员具备所有权限
# IsAuthenticated 只要登录,就具备所有权限
# IsAuthenticatedOrReadOnly 如果登录类就具备所有权限,否则只有读取权限
'rest_framework.permissions.AllowAny',
],
}
3.3 指定权限类: AllowAny--->IsAuthenticated
3.4 前端访问: 提示身份认证信息未提供.
4.使用DRF中的认证授权登录
4.1 查看restframework/urls.py中的登录/等处接口路由
4.2 将restframework/urls.py指定为项目的一个子路由
4.3 使用drf自带的登录登场子应用
django.contrib.auth指定认证子应用
4.4 页面查看
5. 注册添加superuser超级管理员用户
5.1 python manage.py createsuperuser
根据提示没有auth_user表,是因为没有做对应的数据迁移
5.2 数据迁移
# 1.创建迁移脚本(所有)
python manage.py makemigrations
# 2.执行迁移脚本(所有)
python manage.py migrate
5.3 创建超级用户
python manage.py createsuperuser
5.4 查看数据库中是否创建成功
5.5 前端登录
能正常查看数据了
5.6 查看请求中的sessionid认证
6. JWT认证:Json Web Token认证
6.1 最常用的认证方式:
6.1.1 Session认证
6.1.1.1 保存在服务端,会增加服务端开销
session_key会保存在服务端,有可能是保存在mysql,有可能是保存在redis,服务端会把这个session_key发送给浏览器客户端,下次来自客户端的请求就会带上这个session_key,服务端校验这个key是否存在,并且是否过期,以判断是否认证通过.
6.1.1.2 分布式架构中,难以维持Session会话同步
6.1.1.3 会增加CSRF(Cross-site request forgery)跨站请求伪造)攻击风险
6.1.2 Token认证
6.1.2.1 保存在客户端
6.1.2.2 跨语言,跨平台
6.1.2.3 扩展性强
6.1.2.4 鉴权性高
6.2 token组成的3部分
token示例:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImNodW50aWFuIiwiYWdlIjo0fQ.RMrtCAaCx36YpaQ-kFltBG5fOd1MMXXSh4tezA0NcMI
token由3部分组成: header+playload+signature
6.2.1 header
声明类型
声明加密算法,默认为HS256
base64加密,可以解密
6.2.2 payload
存放过期时间,签发用户等
可以添加用户的非敏感信息
base64加密,可以解密
6.2.3 signature
由3部分组层: 使用base64加密后的header+ . + 使用base64加密后的payload+ 使
用HS256算法加密,同时secret加盐处理.
6.3 python使用第三方模块pyjwt实现token加解密
6.3.1 安装pyjwt模块
pip3 install pyjwt
6.3.2 token生成
6.3.3 token解密
6.4 djangorestframework-jwt使用
6.4.1 安装
pip3 install djangorestframework-jwt
6.4.2 查看drf-jwt提供的token路由
obtain_jwt_token: 生成获取token
refresh_jwt_token: 刷新token
verify_jwt_token: 校验token
6.4.3 全局路由表中注册路由obtain_jwt_token
6.4.4 settings.py中配置
查看django生成token时使用到的随机生成的secret_key
6.4.5 前端检验jwt是否生效
- 由于JSON Web Token不再维护,故不使用。
若提示JWT导入错误,那么就需要使用官方提供的simpleJWT认证
1.pip install djangorestframework-simplejwt
2.配置
# settings.py
INSTALLED_APPS = [
...
'rest_framework', # add
'rest_framework_simplejwt', # add
]
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
),
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_simplejwt.authentication.JWTAuthentication',
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.BasicAuthentication',
),
}
SIMPLE_JWT = {
# token有效时长(返回的 access 有效时长)
'ACCESS_TOKEN_LIFETIME': datetime.timedelta(seconds=3600),
# token刷新的有效时间(返回的 refresh 有效时长)
'REFRESH_TOKEN_LIFETIME': datetime.timedelta(seconds=20),
}
3.配置路由
4.验证