跳转到主要内容

使用“魔法链接”为您的Django项目提供无摩擦的认证。

项目描述

django-sesame

django-sesame为您的Django项目提供“魔法链接”认证。

它生成包含认证令牌的URL,例如:https://example.com/?sesame=zxST9d0XT9xgfYLvoa9e2myN

然后根据URL中找到的令牌进行用户认证。

更广泛地说,它支持广泛的无状态、基于令牌的认证用例

在使用django-sesame之前,请查看(不)安全性考虑事项。


文档可在ReadTheDocs上找到。


要求

django-sesame与以下版本进行了测试

  • Django 3.2 (LTS)、4.0、4.1、4.2 (LTS) 和 5.0;

  • Python ≥ 3.8。

它需要 django.contrib.auth

入门指南

安装django-sesame

$ pip install django-sesame

打开您的项目设置,并将 "sesame.backends.ModelBackend" 添加到 AUTHENTICATION_BACKENDS 设置中。扩展默认值,它看起来像

AUTHENTICATION_BACKENDS = [
    "django.contrib.auth.backends.ModelBackend",
    "sesame.backends.ModelBackend",
]

现在,您的项目可以基于django-sesame令牌进行用户认证。

快速示例

在您的URLconf中配置 LoginView

from django.urls import path
from sesame.views import LoginView

urlpatterns = [
    ...,
    path("sesame/login/", LoginView.as_view(), name="sesame-login"),
    ...,
]

从数据库加载用户

>>> from django.contrib.auth import get_user_model
>>> User = get_user_model()
>>> user = User.objects.first()

为此用户生成登录URL

>>> from sesame.utils import get_query_string
>>> LOGIN_URL = "https://127.0.0.1:8000/sesame/login/"
>>> LOGIN_URL + get_query_string(user)
'https://127.0.0.1:8000/sesame/login/?sesame=zxST9d0XT9xgfYLvoa9e2myN'

(您的令牌将与此示例不同。)

确保您已注销。打开登录URL。您已登录!

用例

django-sesame的已知用例包括

  1. 通过电子邮件登录,在移动设备上输入密码不舒适时是一个吸引人的选项。这种技术被Slack广泛使用。

    如果您这样做,您应该定义一个小的 SESAME_MAX_AGE,例如10分钟。

  2. 认证链接。例如,您可以在离线生成报告后,当它准备好时,通过电子邮件发送一个链接来访问它。认证链接即使在用户未在打开它的设备上登录的情况下也能正常工作。

    同样,您应该配置适当的 SESAME_MAX_AGE,可能是一两天。

    由于电子邮件可能会被转发,认证链接不应使用户登录。它们应该只允许访问特定视图。

  3. 共享链接,这是认证链接的变体。当用户与访客分享内容时,您可以为此访客创建一个幽灵账户,并为该账户生成一个认证链接,或者您可以使用用户的账户。

    在这种情况下,电子邮件转发也很可能发生。确保共享链接不会使用户登录。

  4. WebSocket连接的认证。Web应用程序获取由Django服务器生成的令牌,并通过WebSocket连接发送它。WebSocket服务器使用令牌进行连接认证。

    以下是一个使用 websockets库的示例

  5. 非关键私人网站,例如家庭或俱乐部网站,用户不需要用密码管理个人账户。授权用户可以收藏个性化的认证URL。

    在这里,您可以依赖默认设置,因为那是django-sesame最初——诚然,是一个利基——用例。

(不)安全性

django-sesame的主要安全弱点是其实施功能的直接后果:任何获得认证令牌的人都能认证到您的网站。

URL最终出现在无数不安全的地方:电子邮件、引用者头、代理日志、浏览器历史记录等。您无法避免这一点。最好的办法是通过创建短期或一次性令牌来减轻。

否则,已经尽力提供了一个安全解决方案。令牌使用现代密码学进行保护。有可配置的令牌失效选项。

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分发

django_sesame-3.2.2.tar.gz (17.6 kB 查看哈希值)

上传时间 源码

构建版本

django_sesame-3.2.2-py3-none-any.whl (20.3 kB 查看哈希值)

上传时间 Python 3

由以下支持