Django学习开发:使用openldap实现账号的统一管理
基于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
# 新增项目
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
第二步ldap-create-user-02
第三步ldap-create-user-03
此处请注意1. RDN 选择 cn
2。 cn 是我们用来登录的用户名
3。往下选择配置邮箱、密码等。
使用ldap用户登录Django后端
第一次使用ldap账号登录Django后端,报错如下: ldap -user-login-to-django-error
当您第一次使用Ldap帐户登录Django后端时,Django默认会在后端添加一个新用户,但新用户是不是工作人员
、
可以通过下图确认ldap-user-login-to-django
在Django后台编辑用户taff,然后再次登录成功,如下图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前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。