Django REST Framework JWT 配置完全手册:20个关键设置详解
Django REST Framework JWT 配置完全手册20个关键设置详解【免费下载链接】django-rest-framework-jwtJSON Web Token Authentication support for Django REST Framework项目地址: https://gitcode.com/gh_mirrors/dj/django-rest-framework-jwtDjango REST Framework JWTJSON Web Token是为Django REST Framework提供身份验证支持的强大工具。本文将详细解析20个核心配置选项帮助开发者快速掌握JWT认证的完整设置方法轻松实现安全可靠的API身份验证。基础配置构建JWT认证基石JWT_SECRET_KEY令牌加密的核心密钥JWT_SECRET_KEY是用于加密JWT令牌的关键密钥默认使用Django项目的SECRET_KEY。在生产环境中建议单独设置高强度密钥以增强安全性。配置位置rest_framework_jwt/settings.py# settings.py JWT_AUTH { JWT_SECRET_KEY: your-strong-secret-key-here, # 建议至少32位长度 }JWT_ALGORITHM选择安全的加密算法默认使用HS256HMAC-SHA256算法支持RS256、RS512等非对称加密算法。非对称加密可通过JWT_PRIVATE_KEY和JWT_PUBLIC_KEY配置密钥对。配置示例# 使用RSA算法 JWT_AUTH { JWT_ALGORITHM: RS512, JWT_PRIVATE_KEY: open(private.pem).read(), JWT_PUBLIC_KEY: open(public.pem).read(), }令牌生命周期管理JWT_EXPIRATION_DELTA访问令牌有效期控制访问令牌的过期时间默认300秒5分钟。根据安全需求调整敏感系统建议缩短有效期。配置位置rest_framework_jwt/settings.py# 设置访问令牌有效期为15分钟 JWT_AUTH { JWT_EXPIRATION_DELTA: datetime.timedelta(minutes15), }JWT_REFRESH_EXPIRATION_DELTA刷新令牌有效期当启用令牌刷新功能时此设置控制刷新令牌的有效期默认7天。配置示例# 允许令牌刷新并设置有效期为30天 JWT_AUTH { JWT_ALLOW_REFRESH: True, JWT_REFRESH_EXPIRATION_DELTA: datetime.timedelta(days30), }请求验证与安全设置JWT_VERIFY启用令牌验证默认启用对令牌进行签名验证。禁用时将跳过签名验证仅用于开发调试生产环境必须启用。配置位置rest_framework_jwt/settings.pyJWT_VERIFY_EXPIRATION启用过期验证默认启用检查令牌是否过期。可通过设置为False临时禁用过期检查但不建议在生产环境使用。相关代码rest_framework_jwt/utils.pyJWT_LEEWAY时间容错窗口设置令牌过期时间的容错秒数默认0秒。用于解决服务器间时间同步问题建议设置不超过60秒。认证头与Cookie配置JWT_AUTH_HEADER_PREFIX认证头前缀指定HTTP认证头的前缀默认JWT。客户端请求时需使用Authorization: JWT token格式。可修改为Bearer等其他值# 使用Bearer前缀 JWT_AUTH { JWT_AUTH_HEADER_PREFIX: Bearer, }JWT_AUTH_COOKIE启用Cookie存储默认不启用设置为字符串时将令牌存储在指定Cookie中增强安全性。配置示例# 将令牌存储在jwt_token cookie中 JWT_AUTH { JWT_AUTH_COOKIE: jwt_token, }高级功能配置JWT_AUDIENCE与JWT_ISSUER受众与发行者验证设置令牌的受众和发行者声明增强令牌验证的严格性JWT_AUTH { JWT_AUDIENCE: my-api, JWT_ISSUER: https://api.example.com, }JWT_GET_USER_SECRET_KEY用户专属密钥允许为不同用户使用不同的加密密钥提高安全性。需定义一个返回用户专属密钥的函数# 自定义用户密钥函数 def get_user_secret_key(user): return user.secret_key # 假设用户模型有secret_key字段 JWT_AUTH { JWT_GET_USER_SECRET_KEY: get_user_secret_key, }自定义处理器配置JWT_PAYLOAD_HANDLER自定义载荷生成默认载荷包含用户ID、用户名和过期时间可通过自定义处理器添加更多信息# 自定义载荷处理器 def custom_payload_handler(user): payload { user_id: user.id, username: user.username, email: user.email, is_staff: user.is_staff } return payload JWT_AUTH { JWT_PAYLOAD_HANDLER: custom_payload_handler, }JWT_RESPONSE_PAYLOAD_HANDLER自定义响应格式控制令牌响应的格式默认返回{token: token}可扩展为包含用户信息# 自定义响应处理器 def custom_response_handler(token, userNone, requestNone): return { token: token, user: { id: user.id, username: user.username } } JWT_AUTH { JWT_RESPONSE_PAYLOAD_HANDLER: custom_response_handler, }完整配置示例以下是一个生产环境推荐的完整配置示例涵盖安全与功能平衡# settings.py from datetime import timedelta JWT_AUTH { JWT_SECRET_KEY: os.environ.get(JWT_SECRET_KEY, settings.SECRET_KEY), JWT_ALGORITHM: HS256, JWT_VERIFY: True, JWT_VERIFY_EXPIRATION: True, JWT_LEEWAY: 60, JWT_EXPIRATION_DELTA: timedelta(minutes15), JWT_ALLOW_REFRESH: True, JWT_REFRESH_EXPIRATION_DELTA: timedelta(days7), JWT_AUTH_HEADER_PREFIX: Bearer, JWT_AUTH_COOKIE: jwt_token, JWT_AUDIENCE: my-api, JWT_ISSUER: https://api.example.com, }最佳实践与注意事项密钥管理生产环境中务必使用环境变量存储密钥避免硬编码令牌有效期访问令牌建议15分钟内刷新令牌不超过30天算法选择敏感系统优先使用RS256等非对称加密算法安全传输始终通过HTTPS传输JWT令牌防止中间人攻击定期轮换定期轮换加密密钥降低密钥泄露风险通过合理配置这些关键设置您可以构建一个既安全又灵活的JWT认证系统为Django REST Framework API提供可靠的身份验证保障。更多配置细节可参考项目源码中的rest_framework_jwt/settings.py文件。【免费下载链接】django-rest-framework-jwtJSON Web Token Authentication support for Django REST Framework项目地址: https://gitcode.com/gh_mirrors/dj/django-rest-framework-jwt创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考