📜  使用 OTP(2 因素身份验证)保护 Django 管理员登录

📅  最后修改于: 2022-05-13 01:54:20.690000             🧑  作者: Mango

使用 OTP(2 因素身份验证)保护 Django 管理员登录

在为我们的应用程序添加安全性时,多因素身份验证是最基本的原则之一。在本教程中,我们将使用 OTP 方法添加多因素身份验证。这篇文章是 Django 博客 CMS 项目的延续。在这里查看 –使用 Django 构建博客 CMS(内容管理系统)

为 Django 项目设置 2 因素身份验证

我们将为我们的博客 CMS 安装 TOTP 包,这将为我们的管理员登录添加 OTP 安全性。首先安装django-otp包

pip install django-otp

并在我们安装的应用程序中添加'django_otp, django_otp.plugins.otp_totp ' ,并在我们的设置文件的中间件部分添加 django_otp.middleware.OTPMiddleware。

Python3
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django_otp',
    'django_otp.plugins.otp_totp'
  
]
  
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django_otp.middleware.OTPMiddleware'
]


Python3
from django_otp.admin import OTPAdminSite
  
admin.site.__class__ = OTPAdminSite


Python3
SECURE_SSL_REDIRECT = True
SESSION_COOKIE_SECURE = True
SESSION_COOKIE_SECURE = True
SECURE_BROWSER_XSS_FILTER = True
SECURE_HSTS_SECONDS = 31536000
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
SECURE_HSTS_PRELOAD = True
SECURE_CONTENT_TYPE_NOSNIFF = True
CSRF_COOKIE_SECURE = True


现在跑,

# migrate our app
python3 manage.py migrate

创建 TOTP 设备 –

现在登录 django admin 创建一个 TOTP 设备。登录后可以看到

登录页面

单击添加并填写详细信息以创建新的 TOTP 二维码

添加 TOTP 设备

现在再次进入 totp 设备部分并打开二维码并使用您的 TOTP 应用程序(如 Authy、Google Authenticator 应用程序)进行扫描。

扫描二维码

设置管理员 OTP 类 –

现在进入 gfgblog 中的 django urls.py 文件,而不是博客 urls.py 并添加行

蟒蛇3

from django_otp.admin import OTPAdminSite
  
admin.site.__class__ = OTPAdminSite

输出 -

现在注销并登录到 django admin 您每次需要登录到 django admin 时都会输入 OTP。

带有 OTP 的 Django 管理员

要遵循的一些基本安全原则

  • 在生产中保持 Debug = False
  • 限制允许托管到我们的服务器 IP、本地主机和主机名
  • 保持密钥强大和安全
  • 所有方式在生产中使用 HTTPS
  • 如果由多个用户管理,请检查用户上传
  • 确保您的数据库安全,不要在生产中使用 SQLite
  • 尝试在生产中使用安全和内容标头,下面给出了一些标头,在 Settings.py 中添加这些标头

蟒蛇3

SECURE_SSL_REDIRECT = True
SESSION_COOKIE_SECURE = True
SESSION_COOKIE_SECURE = True
SECURE_BROWSER_XSS_FILTER = True
SECURE_HSTS_SECONDS = 31536000
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
SECURE_HSTS_PRELOAD = True
SECURE_CONTENT_TYPE_NOSNIFF = True
CSRF_COOKIE_SECURE = True