Code前端首页关于Code前端联系我们

Django学习开发:使用openldap实现账号的统一管理

terry 2年前 (2023-09-24) 阅读数 59 #后端开发

基于ldap学习账号 登录 Django开发的运维系统基于企业内部系统统一账号管理 奠定基础

了解并安装 LDAP

LDAP 简介

LDAP(轻量级目录访问协议)是一种轻量级目录访问协议,用于访问和维护分布式目录。

LDAP 最初设计用于提供对 X.500 目录服务的简化访问,现已广泛用于各种应用程序和系统,包括身份验证、授权、用户管理和资源管理。

LDAP 广泛应用于许多公司和组织的身份管理、用户身份验证、权限控制、电子邮件系统、VPN 访问、公钥基础设施 (PKI) 等。

它提供了一种有效的方式来组织和管理大量目录数据,并提供对该数据的可靠且高效的访问。 ?一个是phpldapadmin

下面是docker-compose.yml的内容

version: '3'

services:
  openldap:
    # 容器的名称,确保唯一性,用户命令行管理
    # 同时如果多个容器关联时,使用的也是这个名称
    container_name: openldap
    # 容器镜像
    image: osixia/openldap:latest
    # 重启方案
    restart: always
    # 定义容器中的环境变量
    # 这里主要是为了在安装初始化ldap的时候,初始化ldap的 组织、域名和密码
    # 注意: 默认的admin账号是 cn=admin,dc=colinspace,dc=com
    environment:
      LDAP_ORGANISATION: "colinspace"
      LDAP_DOMAIN: "colinspace.com"
      LDAP_ADMIN_PASSWORD: "ldapinitpass99"
      LDAP_CONFIG_PASSWORD: "ldapinitpass99"
    # ldap端口映射
    # 389 ldap协议普通端口;636 ldap协议安全端口 secure port
    # 注意这里映射到外面的端口,后续再Django中获取其他可以对接ldap的系统中要使用
    ports:
      - "8389:389"
      - "8636:636"
  # 定义第二个service, phpldapadmin
  phpldapadmin:
    container_name: phpldapadmin
    image: osixia/phpldapadmin:latest
    ports:
      - "8080:80"
    environment:
      - PHPLDAPADMIN_HTTPS="false"
      - PHPLDAPADMIN_LDAP_HOSTS=openldap
    links:
      - openldap
    depends_on:
      - openldap

上面的配置文件中还有一个关键的解释就是links和depends_on的用法和区别。

详细内容请参见参数,如果启动过程出现问题,可以直接在命令行中看到

登录地址是当前主机节点加端口8080

注意?登录账号为 cn=admin,dc=colinspace,dc =com 而不是直接 admin

django 继承 ldap 需要在 Djan 中安装该模块。 django-python3-ldap-在项目的settings.py中配置它
# 新增项目
django-admin startproject dj_ldap

# 新增 app
cd dj_ldap
python manage.py startapp appdemo

编辑djldap/settings.py?对于默认类型的用户,配置用户的cn、sn、givenname和email地址

创建Ldap默认用户

具体参见下图❀1 ldap-create-user-01

第二步Django学习开发:使用openldap实现账号的统一管理ldap-create-user-02

第三步Django学习开发:使用openldap实现账号的统一管理ldap-create-user-03

此处请注意1. RDN 选择 cn

2。 cn 是我们用来登录的用户名

3。往下选择配置邮箱、密码等。

使用ldap用户登录Django后端

第一次使用ldap账号登录Django后端,报错如下:Django学习开发:使用openldap实现账号的统一管理 ldap -user-login-to-django-error

当您第一次使用Ldap帐户登录Django后端时,Django默认会在后端添加一个新用户,但新用户是不是工作人员

可以通过下图确认Django学习开发:使用openldap实现账号的统一管理ldap-user-login-to-django

在Django后台编辑用户taff,然后再次登录成功,如下图Django学习开发:使用openldap实现账号的统一管理ldap-user-login-to-django

访问优化

如上所述,使用Ldap-账号登录时会报错第一次登录Django后端。非工作人员

且熟悉Django的朋友都知道,Django内置了很多信号机制。例如,post_save是一种信号机制,在帖子发送数据后触发。

针对上述问题,我们知道发生了事件创建用户。然后我们可以在创建用户后使用post_save信号更新人员,实现成功单点登录

1。在appdemo应用程序下添加singals.py

# appdemo/signals.py
#!/usr/bin/env python
# encoding: utf-8

from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver

@receiver(post_save, sender=User)
def update_staff(sender, instance, created, **kwargs):
    if created:
        print(f"create new instance: {instance}")
        instance.is_staff = True
        instance.save()

2。 appdemo 应用程序 .py 中的应用程序加载信号

# appdemo/apps.py
from django.apps import AppConfig


class AppdemoConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'appdemo'

    # 新增如下两行配置
    def ready(self):
        import appdemo.signals

3。重新启动 Django 应用程序后,在 ldap 中添加新用户并登录 Django。事实证明,可以一口气成功,而且不会报错。

具体可以尝试按照上面的流程操作。加深你的理解。

来源:全栈运维

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门