Django实现AD域集成

Python实现AD域集成

本片文章简单介绍一下django项目中的AD域集成业务逻辑实现。

AD域

  • “AD域可用于同时管理多台电脑,这样实现集中式管理,可以很大程度减少管理员的工作量。比如曾经我们需要在无数客户端上进行多次的设置,在AD域控制器上只需要设置一次就能完成。”

实现过程

  1. 使用第三方工具:ldap 这是一种通信协议。
  2. 安装python-ldap,不同的环境使用的ldap不同,python2.7和python3.7略有不同。
  3. 了解ldap增删改查
查找和读取一条 LDAP 纪录,比如根据 username 查找出 cn:
def ldap_getcn(username):
    try:
        l = ldap.open(LDAP_HOST)
        l.protocol_version = ldap.VERSION3
        l.simple_bind(LDAP_BIND, LDAP_PASS)

        searchScope = ldap.SCOPE_SUBTREE
        searchFilter = "uid=*" + username + "*"
        resultID = l.search(LDAP_BASE, searchScope, searchFilter, None)
        result_set = []
        while 1:
            result_type, result_data = l.result(resultID, 0)
            if (result_data == []):
                break
            else:
                if result_type == ldap.RES_SEARCH_ENTRY:
                    result_set.append(result_data)
        return result_set[0][0][1]['cn'][0]
    except ldap.LDAPError, e:
        print e
        
更新一条 LDAP 纪录,比如更新用户状态 active 为 false:
def ldap_deactive(username):
    try:
        l = ldap.open(LDAP_HOST)
        l.protocol_version = ldap.VERSION3
        l.simple_bind(LDAP_BIND, LDAP_PASS)

        deactiveDN = ("cn=%s," + LDAP_BASE) % ldap_getcn(username)
        old = {'active':'TRUE'}
        new = {'active':'FALSE'}
        ldif = modlist.modifyModlist(old, new)
        l.modify_s(deactiveDN, ldif)
        l.unbind_s()
    except ldap.LDAPError, e:
        print e   
             
删除一条 LDAP 纪录:
def ldap_delete(username):
    try:
        l = ldap.open(LDAP_HOST)
        l.protocol_version = ldap.VERSION3
        l.simple_bind(LDAP_BIND, LDAP_PASS)

        deleteDN = ("cn=%s," + LDAP_BASE) % ldap_getcn(username)
        l.delete_s(deleteDN)
    except ldap.LDAPError, e:
        print e        
  1. 了解使用方法之后,做一些用户验证,验证成功后将数据保存。
一个简单的验证,django登陆是调用就可以。
import ldap
 
class LDAPBackend(object):
    """
    Authenticates with ldap.
    """
    _connection = None
    _connection_bound = False
 
    def authenticate(self, username=None, passwd=None, **kwargs):
        if not username or not passwd:
            return None
        if self._authenticate_user_dn(username, passwd):
            user = self._get_or_create_user(username, passwd)
            return user
        else:
            return None
 
    @property
    def connection(self):
        if not self._connection_bound:
            self._bind()
        return self._get_connection()
 
    def _bind(self):
        self._bind_as(
            LDAP_CONFIG['USERNAME'], LDAP_CONFIG['PASSWORD'], True
        )
 
    def _bind_as(self, bind_dn, bind_password, sticky=False):
        self._get_connection().simple_bind_s(
            bind_dn, bind_password
        )
        self._connection_bound = sticky
 
    def _get_connection(self):
        if not self._connection:
            self._connection = ldap.initialize(LDAP_CONFIG['HOST'])
        return self._connection
 
    def _authenticate_user_dn(self, username, passwd):
        bind_dn = 'cn=%s,%s' % (username, LDAP_CONFIG['BASE_DN'])
        try:
            self._bind_as(bind_dn, passwd, False)
            return True
        except ldap.INVALID_CREDENTIALS:
            return False
 
    def _get_or_create_user(self, username, passwd):
        # 获取或者新建User
        return user

具体保存什么数据,验证方式还需要业务逻辑.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django AD管理是指在Django中使用Active Directory(AD)来管理用户和权限的一种功能。AD是由Microsoft开发的一种用于在Windows环境下进行身份验证和授权的目录服务,它提供了一套强大的功能,如用户管理、组管理、权限管理等。 Django AD管理可以通过Django的第三方库django-auth-ldap来实现。该库为Django应用程序提供了与AD进行身份验证和用户管理的功能。使用该库,我们可以轻松地将DjangoAD集成实现单一登录和AD账户的同步管理。 首先,我们需要在Django的配置文件中配置AD的连接参数,包括AD服务器的地址、端口号、基本DN等信息。接下来,我们可以使用django-auth-ldap提供的装饰器或中间件来实现用户身份验证。当用户登录时,Django会将用户提供的用户名和密码与AD进行验证,并返回验证结果。 在AD管理中,我们可以通过Django的模型和视图进行用户和组的管理。Django提供了现成的用户模型和权限模型,我们可以通过继承它们的方式来定制自己的用户模型和权限模型。在这些模型上,我们可以添加额外的属性和方法,以实现一些特定的功能需求。 例如,我们可以添加一个is_admin字段来标识用户是否为管理员,然后在视图中根据用户的身份进行权限控制。我们还可以使用Django的内置Form组件来实现用户注册和密码修改等功能。 总之,Django AD管理为开发人员提供了一种简洁、高效的方式来实现AD集成和管理。通过使用django-auth-ldap库,我们可以轻松地实现AD用户的身份验证和权限管理,提高了系统的安全性和管理性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值