Django + JSON Web 令牌 + 禁用基于会话的授权
Posted
技术标签:
【中文标题】Django + JSON Web 令牌 + 禁用基于会话的授权【英文标题】:Django + JSON web tokens + disabling session-based authorization 【发布时间】:2016-10-22 06:25:06 【问题描述】:我目前正在开发一个 Django 项目,该项目想要替换和禁用 Django 的传统基于 cookie 的会话,并将其替换为 JSON Web 令牌作为我网站上用户的用户身份验证方式。(“登录的用户身份验证” -required' 网站的一部分,而不仅仅是 REST API)。
我希望如何在我的网络应用中使用 JSON 网络令牌:登录页面将进行 API 调用并接收 JSON 网络令牌作为响应,并且 JSON 网络令牌将通过以下方式存储(本地存储、会话存储或 cookie)。 JSON Web 令牌将在后续 HTTP 请求(登录后)的 HTTP 标头中传递,以便服务器知道我们是授权用户。
我看过的一些库是“djangorestframework”库。它似乎保护了有关网站 API 的某些 URL(不是我想要的)。是否有任何库可以用 JSON Web 令牌替换 Django 使用的普通“基于 cookie”会话,并具有“基于 cookie”会话授权方案的普通功能(普通 意思是“登录用户和注销用户在网站上以及在 Django 的默认管理面板 中工作”)如果是这样,我如何将该库与我当前的网络应用程序集成以实现正常功能?
我还希望禁用传统的“基于 cookie”的会话。如何完全禁用它,以便仅使用 JSON Web 令牌完成用户身份验证?
【问题讨论】:
您最终找到了禁用基于 cookie 的会话的方法吗?我追求和你一样的功能。 对不起,我没弄明白 【参考方案1】:只需使用 jwt 来认证类。
JSON Web 令牌认证
JSON Web Token 是一个相当新的标准,可用于基于令牌的身份验证。与内置的 TokenAuthentication 方案不同,JWT 身份验证不需要使用数据库来验证令牌。 Blimp 维护 djangorestframework-jwt 包,该包提供 JWT 身份验证类以及客户端在给定用户名和密码的情况下获取 JWT 的机制
还将默认身份验证类设置为 jwt 并在 setting.py 中确定设置,如:
REST_FRAMEWORK =
'DEFAULT_AUTHENTICATION_CLASSES': (
'oauth2_provider.ext.rest_framework.OAuth2Authentication',
)
【讨论】:
以上是关于Django + JSON Web 令牌 + 禁用基于会话的授权的主要内容,如果未能解决你的问题,请参考以下文章
Django REST 的 JSON Web 令牌不会向用户数据库进行身份验证
如何在 Django 和 Python 中使用 JWT(JSON Web 令牌)来创建用于注册和登录的 REST API
使 JWT(JSON Web 令牌)持续更长时间或 Flutter 应用程序的其他替代方案