跳转到主要内容

使用多因素认证保护您的Wagtail站点。支持TOTP和WebAuthn/Passkeys。

项目描述

Wagtail MFA

Wagtail MFA是Wagtail的多因素认证软件包。它为您的Wagtail管理界面增加了额外的安全层。

在内部,Wagtail MFA使用django-otpdjango-otp-webauthn来提供Passkey登录功能。此软件包所做的一切就是提供特定于Wagtail的UI,让用户管理他们的MFA设置,并有一个MFA验证页面。

[!重要]
该软件包处于alpha阶段,尚未功能完整。尚未进行全面测试和文档编制。如果您有兴趣使用此软件包,请为该仓库加星以表示您的兴趣。最终,我打算

屏幕截图

保存Passkey的Safari自动填充提示 指纹登录 已注册的Passkey
Wagtail login page showing a browser prompt to login to this site using saved Passkey Wagtail login page showing a browser prompt asking for a fingerprint scan Wagtail account settings page showing a list of registered Passkeys

功能

支持的认证方法

  • Passkey(支持无密码登录)

即将推出

  • 基于时间的单次密码(TOTP)
  • 恢复码

支持的浏览器

Passkey是一种相对较新的技术,并非所有浏览器都能可靠地支持它们。以下浏览器已过测试,并且已知与Passkey兼容

  • macOS 14上的Chrome 125
  • macOS 14上的Firefox 126(存在已知问题,见已知限制
  • macOS 14上的Safari 17

[^1]:存在无密码登录的已知问题,更多信息请见已知限制

要求

  • Python >= 3.9
  • Django >= 4.2
  • Wagtail >= 5.2

安装

使用pip安装软件包

pip install wagtail-mfa

将所有必需的应用程序添加到您的INSTALLED_APPS

# settings.py

INSTALLED_APPS = [
    ...
    # Wagtail MFA must appear before wagtail because it overrides the default Wagtail login template
    "wagtail_mfa",
    ...
    # django-otp and django-otp-webauthn are required
    "django_otp",
    "django_otp_webauthn",
    ...
]

为了使Passkey正常工作,您需要设置一些额外的django_otp_webauthn设置。

将以下代码片段修改并添加到您的settings.py

# settings.py
OTP_WEBAUTHN_RP_ID = "your-domain.com"
OTP_WEBAUTHN_RP_NAME = WAGTAIL_SITE_NAME
OTP_WEBAUTHN_ALLOWED_ORIGINS = ["https://your-domain.com", "https://subdomain.your-domain.com"]

配置

OTP_WEBAUTHN_RP_ID

示例:your-domain.com

此设置是您网站的默认域名。Passkey与此域名绑定。它不能是像your-app.compute.amazonaws.comyour-app.herokuapp.com这样的“公共后缀”域名。它必须是您拥有的域名。浏览器将拒绝为公共后缀域名创建Passkey。有关公共后缀域名的完整列表,请参阅publicsuffix.org

OTP_WEBAUTHN_RP_NAME

示例:My Cool Wagtail Site

某些浏览器在注册Passkey时将显示此名称。这可以是您网站或公司的名称。

OTP_WEBAUTHN_ALLOWED_ORIGINS

示例:["https://your-domain.com", "https://subdomain.your-domain.com"]

此设置类似于Django的CSRF_TRUSTED_ORIGINS设置,并用于验证Passkey注册/认证请求。它必须是OTP_WEBAUTHN_RP_IDhttps://(子)域名。不要包含尾随斜杠。

已知问题

  • Firefox上的问题。当使用Firefox在Android设备上注册和存储Passkey时,Passkey将无法用于无密码登录。这是因为Firefox不会创建可发现凭证。这似乎是Firefox的限制。这个问题在macOS 14上的Firefox 126上观察到。
  • 多站点支持有限。 WebAuthn目前不支持在不同域名之间使用Passkey。如果您为your-site.com创建了Passkey,则无法在another-site.com上进行认证。但是,支持子域名如subdomain.your-site.com

开发

有关如何开发和向该项目贡献的信息,请参阅DEVELOPMENT.md

许可协议

该项目采用BSD 3-Clause许可证。有关详细信息,请参阅LICENSE文件。

由以下支持