首先,什么是Ldap,官方解释

轻型目录访问协议(英文:Lightweight Directory Access Protocol,缩写:LDAP,/ˈɛldæp/)是一个开放的,中立的,工业标准的应用协议,通过ip协议提供访问控制和维护分布式信息的目录信息。

ldap能做什么?为什么要用ldap

LDAP的一个常用用途是单点登录,用户可以在多个服务中使用同一个密码,通常用于公司内部网站的登录中(这样他们可以在公司计算机上登录一次,便可以自动在公司内部网上登录)。

话不多说,上代码解释

# settings.py

import ldap
from django_auth_ldap.config import LDAPSearch, GroupOfNamesType, PosixGroupType try:
import ConfigParser as conf
except ImportError as e:
import configparser as conf config = conf.ConfigParser()
config.read(os.path.join(BASE_DIR, 'conf/config.ini')) if config.get('ldap', 'enable') == 'true':
ldap_filter = config.get('ldap', 'filter')
if ldap_filter == "OpenLDAP":
ldap_filter = '(cn=%(user)s)'
else:
ldap_filter = '(sAMAccountName=%(user)s)' AUTHENTICATION_BACKENDS = (
'django_auth_ldap.backend.LDAPBackend', # 首先通过ldap认证,认证不通过走登录接口验证,ldap用户第一次登录,检测到数据库没有该用户,会自动创建一份用户信息到对应user表
'django.contrib.auth.backends.ModelBackend',
) AUTH_LDAP_SERVER_URI = "ldap://{server}:{port}".format(server=config.get('ldap', 'server'),port=config.get('ldap', 'port'))
AUTH_LDAP_BIND_DN = "{bind_dn}".format(bind_dn=config.get('ldap', 'bind_dn'))
AUTH_LDAP_BIND_PASSWORD = "{password}".format(password=config.get('ldap', 'bind_password'))
AUTH_LDAP_USER_SEARCH = LDAPSearch("{search_dn}".format(search_dn=config.get('ldap', 'search_dn')), ldap.SCOPE_SUBTREE, ldap_filter)
AUTH_LDAP_GROUP_TYPE = PosixGroupType(name_attr='cn')
AUTH_LDAP_USER_ATTR_MAP = {
"first_name": "givenName",
"last_name": "sn",
"email": "mail"
}
AUTH_LDAP_ALWAYS_UPDATE_USER = True if config.get('inception', 'enable') == 'true':
INCEPTION_CONFIG = {
"host":config.get('inception', 'host'),
"port":config.get('inception', 'port'),
"backup_host":config.get('inception', 'backup_host'),
"backup_passwd":config.get('inception', 'backup_passwd'),
"backup_user":config.get('inception', 'backup_user'),
"backup_port":config.get('inception', 'backup_port')
}
#    config.ini

[ldap]
enable = true
server = xxx.xxx.xxx.xxx # ldap服务器ip
port = 389 # 端口默认389
bind_dn = cn=账号,dc=域名,dc=域名 # 账号必须是ldap管理员账号
bind_password = 密码 # 这些都问公司运维部门要
search_dn = ou=People,dc=域名,dc=域名
filter = OpenLDAP

  

view.py

用户表可以直接重写django-admin自带的user表,其内置了auth的验证方法

from django.contrib import auth

# 登录
def login(request):
if request.session.get('username') is not None:
return HttpResponseRedirect('/',{"user":request.user})
else:
username = request.POST.get('username')
password = request.POST.get('password')
user = auth.authenticate(username=username,password=password) # 认证方法,验证用户名密码都正确返回该用户对象
if user and user.is_active:
auth.login(request,user)
request.session['username'] = username
return HttpResponseRedirect('/',{"user":request.user})
else:
if request.method == "POST":
return render(request,'login.html',{"login_error_info":"用户名或者密码错误","username":username},)
else:
return render(request,'login.html') # 退出登录
def logout(request):
auth.logout(request) # 登出,清楚session
return HttpResponseRedirect('/login')

创建auth_user中的用户通过

python manage.py create superuser

devops--django+ldap的更多相关文章

  1. [原创]django+ldap+memcache实现单点登录+统一认证

    前言 由于公司内部的系统越来越多,为了方便用户使用,通过django进行了单点登录和统一认证的尝试,目前实现了django项目的单点登录和非django项目的统一认证,中间波折挺多,涉及的技术包括dj ...

  2. [原创]django+ldap实现统一认证部分二(python-ldap实践)

    前言 接上篇文章 [原创]django+ldap实现统一认证部分一(django-auth-ldap实践) 继续实现我们的统一认证 python-ldap 我在sso项目的backend/lib/co ...

  3. [原创]django+ldap实现统一认证部分一(django-auth-ldap实践)

    前言 接之前我的文章,django+ldap+memcache实现单点登录+统一认证 ,ldap部署相关,ldap双机\LAM配置管理\ldap备份还原,目前来说,我们已经有了高可用性的ldap环境了 ...

  4. [原创]django+ldap实现单点登录(装饰器和缓存)

    前言 参考本系列之前的文章,我们已经搭建了ldap并且可以通过django来操作ldap了,剩下的就是下游系统的接入了,现在的应用场景,我是分了2个层次,第一层次是统一认证,保证各个系统通过ldap来 ...

  5. django LDAP

    > http://goodosoft.github.io/2015/02/25/Using-AD-as-authentication-for-Django/ > http://my.osc ...

  6. ldap部署相关,ldap双机\LAM配置管理\ldap备份还原

    前言 接之前我的文章,django+ldap+memcache实现单点登录+统一认证 就单点登录实现过程进行详细记录,ldap是一切的基础,可以把它理解成一个读强写弱的文件类型数据库,统一认证我们通过 ...

  7. python3 使用ldap3来作为django认证后台

    首先先使用ldap3测试ldap服务是否正常 我们先要拿到dc的数据,以及连接ldap的密码,还有搜索的字段(search_filter), 一般来说search_filter 这个是从负责ldap运 ...

  8. Django用openLDAP做认证

    前言 之前有需求要做一个django+ldap用户管理的简单接口,研究了好几个模块,最后终于能实现django用ldap做用户认证了.也是自己的水平有限吧,做了好长时间,现在就和大家分享一下这个过程吧 ...

  9. 7.openldap使用ssl加密认证

    作者:yaoyao 1.服务器端部署 1.自建CA中心 1.CA中心生成自身私钥 #cd /etc/pki/CA #(umask 077; openssl genrsa -out private/ca ...

  10. django使用ldap认证

    pip3 install django-auth-ldap python-ldap urls.py, from app0104 import views urlpatterns = [ url(r'^ ...

随机推荐

  1. 每周一练 之 数据结构与算法(Stack)

    最近公司内部在开始做前端技术的技术分享,每周一个主题的 每周一练,以基础知识为主,感觉挺棒的,跟着团队的大佬们学习和复习一些知识,新人也可以多学习一些知识,也把团队内部学习氛围营造起来. 我接下来会开 ...

  2. 【算法】272-每周一练 之 数据结构与算法(Dictionary 和 HashTable)

    这是第五周的练习题,上周忘记发啦,这周是复习 Dictionary 和 HashTable. 下面是之前分享的链接: [算法]200-每周一练 之 数据结构与算法(Stack) [算法]213-每周一 ...

  3. 一元建站-基于函数计算 + wordpress 构建 serverless 网站

    前言 本文旨在通过 快速部署一个 wordpress 网站到阿里云函数计算平台 这个示例来展示 serverless web 新的开发模式, 包括 FUN 工具一键初始化 NAS, 同步网站到 NAS ...

  4. shell 100

    1.编写hello world脚本 #!/bin/bash# 编写hello world脚本 echo "Hello World!"2.通过位置变量创建 Linux 系统账户及密码 ...

  5. UWP 使用SSL证书,保证数据安全

    事情是这样的,我们后端的小伙伴升级了用户会员系统,使用了全新的GraphQL登录机制,并且采用SSL加密的方式来实现阻止陌生客户端请求的案例. GraphQL在UWP端的实现,以后有时间会单独写一篇文 ...

  6. 【Java笔试】对数据库中的分解是否为无损连接和是否保持函数依赖的判定-由牛客网试题引申-保姆式教学

    [牛客网数据库原理题目]设关系模式R(A,B,C),F是R上成立的FD集,F={A→B,C→B},ρ={AB,AC}是R的一个分解,那么分解ρ()? 正确答案:C你的答案:A(错误) ( A ) 保持 ...

  7. PAT1057 Stack(树状数组+倍增)

    目录 题目大意 题目分析 题目大意 要求维护一个栈,提供压栈.弹栈以及求栈内中位数的操作(当栈内元素\(n\)为偶数时,只是求第\(n/2\)个元素而非中间两数的平均值).最多操作100000次,压栈 ...

  8. CCF-CSP题解 201609-3 炉石传说

    模拟. 注意随从的编号在\(summon\)和\(attack\)随从死亡时都可能改变. #include <bits/stdc++.h> using namespace std; str ...

  9. 天天动听API

    本次分析的是天天动听API,天天动听有一点比较好,就是搜索返回直接有歌曲播放的地址了,并且有无损的音频 搜索歌曲API:http://so.ard.iyyin.com/s/song_with_out? ...

  10. 自定义滚动条(Custom ScrollBar)

    时间如流水,只能流去不流回! 点赞再看,养成习惯,这是您给我创作的动力! 本文 Dotnet9 https://dotnet9.com 已收录,站长乐于分享dotnet相关技术,比如Winform.W ...