美文网首页Web 开发
django-admin实现2FA双因子认证的方法

django-admin实现2FA双因子认证的方法

作者: 焰火青春 | 来源:发表于2020-05-22 10:56 被阅读0次

    目的:增加 Admin 的安全

    1、安装:

    pip install django_otp
    pip install qrcode
    

    2、配置 settings

    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'app.apps.AppConfig',
    
        # 新增
        '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',
        'django.contrib.messages.middleware.MessageMiddleware',
        'django.middleware.clickjacking.XFrameOptionsMiddleware',
    ]
    

    3、配置 urls.py

    from django.contrib import admin
    from django.urls import path
    
    # 新增
    from django_otp.admin import OTPAdminSite
    
    admin.site.__class__ = OTPAdminSite
    
    urlpatterns = [
        path('admin/', admin.site.urls),
    ]
    

    4、迁移生成数据表:

    python manage.py makemigrations
    python manage.py migrate
    python manage.py migrate otp_totp
    

    5、创建超级用户:

    python manage.py createsuperuser
    

    运行项目,访问 admin 平台,发现除了用户名和密码之外还多了一个 Token 验证。

    注释上面有关 django-otp 的所有配置,重新访问 admin 平台,进入之后选择 TOTP device,新增用户,点击 User 旁边的 搜索框,选择上面注册的 admin 用户,然后保存。

    回到用户列表,发现多个了一个 qrcode 字段,点击就能显示出二维码,收集下载 app FreeOTP,登陆 admin 平台时,用 app 扫描二维码,生成口令然后登陆。

    注意:记得取消上面有个 django-otp 的注释!

    其他方式增加 Admin 安全

    1、修改 admin 的访问 URL,使用比较难猜测的地址

    urlpatterns += i18n_patterns(
        url(r’^super-secret/’, admin.site.urls, name=’admin’),
    )
    

    2、配置 nginx 来限制访问 ip

    location /admin/ {    # 允许192.168.10.100访问此路由
        allow 192.168.10.100;    # 禁止所有其他IP访问
        deny all;
        ...其他常规配置项}
    

    参考文章

    • 基于Django的双因子认证实现:https://www.freebuf.com/articles/network/150071.html
    • django-admin实现2FA双因子认证的方法:https://jingyan.baidu.com/article/49ad8bce188ce71835d8fa7a.html
    • django-otphttps://django-otp-official.readthedocs.io/en/latest/
    • django项目:nginx怎么配置来限制ip对后台admin的访问?:http://www.imooc.com/wenda/detail/516371
    • 「译」5 种方法构建安全的 Django Admin:https://zhuanlan.zhihu.com/p/28517753

    相关文章

      网友评论

        本文标题:django-admin实现2FA双因子认证的方法

        本文链接:https://www.haomeiwen.com/subject/pwtqahtx.html