我是Django的新手,并被分配了以LDAP作为后端实现用户身份验证系统的任务.我想文档假设最终开发人员在Django中有足够的经验来理解和实现这样的系统.这是我无法理解如何使用基于LDAP的身份验证实现简单的django应用程序的地方.这是我到目前为止所理解的:
仅将更改发布到文件:
settings.py
....
import ldap
from django_auth_ldap.config import LDAPSearch
AUTH_LDAP_SERVER_URI = "ldap://<my url>"
AUTHENTICATION_BACKENDS = ('django_auth_ldap.backend.LDAPBackend')
AUTH_LDAP_CONNECTION_OPTIONS = {
ldap.OPT_REFERRALS: 0
}
MIDDLEWARE_CLASSES = (
....
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
...
)
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
....
)
Run Code Online (Sandbox Code Playgroud)
auth.html
<html>
<head>
<title>Login</title>
</head>
<body>
{{state}}
<form action="" method="post"> {% csrf_token %}
Email address: <input type="text" name="email" value="{{ email }}" />
Password: <input type="password" name="password" value="" />
<input type="submit" value="Log in" />
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
models.py:
??
Run Code Online (Sandbox Code Playgroud)
views.py: …
我一直试图让LDAP - > Django组映射工作没有成功.除了组映射部分外,一切似乎都能正常工作.我的LDAP后端是Active Directory.我正在使用django-auth-ldap 1.0.10.
settings.py:
import ldap, logging
from django_auth_ldap.config import LDAPSearch, ActiveDirectoryGroupType
logger = logging.getLogger('django_auth_ldap')
logger.addHandler(logging.StreamHandler())
logger.setLevel(logging.DEBUG)
AUTH_LDAP_SERVER_URI = "ldap://sub.domain.com"
AUTH_LDAP_BIND_DN = 'CN=Bind Account,OU=Users,OU=Users,OU=Chicago,DC=sub,DC=domain,DC=com'
AUTH_LDAP_BIND_PASSWORD = 'passwd'
AUTH_LDAP_USER_SEARCH = LDAPSearch('OU=Users,OU=Users,OU=Chicago,DC=sub,DC=domain,DC=com', ldap.SCOPE_SUBTREE, "(uid=%(user)s)",)
AUTH_LDAP_GROUP_SEARCH = LDAPSearch("OU=Groups,OU=Chicago,DC=sub,DC=domain,DC=com", ldap.SCOPE_SUBTREE, "(objectClass=groupOfNames)")
AUTH_LDAP_GROUP_TYPE = ActiveDirectoryGroupType()
AUTH_LDAP_FIND_GROUP_PERMS = True
#AUTH_LDAP_CACHE_GROUPS = True
#AUTH_LDAP_GROUP_CACHE_TIMEOUT = 3600
AUTH_LDAP_GLOBAL_OPTIONS = {
ldap.OPT_X_TLS_REQUIRE_CERT: False,
ldap.OPT_REFERRALS: False,
}
AUTH_LDAP_USER_ATTR_MAP = {
"first_name": "givenName",
"last_name": "sn",
"email": "mail"
}
AUTH_LDAP_USER_FLAGS_BY_GROUP = {
"is_staff": "CN=SomeGroup,OU=Groups,OU=Chicago,DC=sub,DC=domain,DC=com",
}
AUTHENTICATION_BACKENDS = (
'django_auth_ldap.backend.LDAPBackend', …Run Code Online (Sandbox Code Playgroud) authentication django ldap active-directory django-auth-ldap
我有一个使用django运行的应用程序.现在我只想通过openldap服务器进行身份验证的用户看到"他们的视图"(因此我在成功验证后只需要他们的uid)
我怎样才能实现这一目标?
我想django-auth-ldap是要走的路,所以我整天都试着去了解身份验证的实际发生地点以及如何让用户的uid请求查看.
我使用settings.py的文档,但我无法找到如何"实际使用"它.也许有人可以指出我正确的方向?
settings.py:
import ldap
AUTHENTICATION_BACKENDS = (
'django_auth_ldap.backend.LDAPBackend',
'django.contrib.auth.backends.ModelBackend',
)
AUTH_LDAP_SERVER_URI = "ldap://123.60.56.61"
AUTH_LDAP_BIND_DN = ""
AUTH_LDAP_BIND_PASSWORD = ""
AUTH_LDAP_USER_DN_TEMPLATE = "uid=%(user)s,dc=rd,dc=corpintra,dc=net"
Run Code Online (Sandbox Code Playgroud)
(顺便说一句:我已经可以使用python-ldap执行ldap-searche并在命令行上获得类似ldapsearch的结果,所以其他一切都运行得很好......)
我的观点需要什么?
谢谢你的帮助!
我有一个容器化的应用程序,它使用django-auth-ldap在Active Directory中搜索用户.我想结合两个独立OU的输出.是否有不同的方法或重载可能需要两个DN或一种方式来加入两个单独搜索的输出?
AUTH_LDAP_USER_SEARCH = LDAPSearch(os.environ.get('AUTH_LDAP_USER_SEARCH_BASEDN', ''),
ldap.SCOPE_SUBTREE,
"(sAMAccountName=%(user)s)")
Run Code Online (Sandbox Code Playgroud) 我在使用LDAP身份验证模块django-auth-ldap时遇到问题.我正在使用此站点的示例配置:http://packages.python.org/django-auth-ldap/
我想做两件事:
1)针对LDAP进行身份验证:目前,我的LDAP数据库是空的,我没有添加任何内容,实际上我不知道如何.但是,我仍然能够使用存储在我的django数据库中的旧登录/密码登录到基于django的站点.这是为什么?这不应该被忽略,不应该使用LDAP用户/密码进行登录过程吗?换句话说,如果我的LDAP数据库为空,那么我的每次登录都不应该失败吗?但是,它没有,我的印象是django完全忽略了django-auth-ldap模块.
2)使用django同步LDAP(而不是相反)我不想使用现有的用户数据库进行身份验证.我希望能够在Django中创建新用户并将这些用户传播到LDAP,这样他们就可以被其他服务共享,在我的例子中是一个openfire服务器.你是怎么用django-auth-ldap那样做的?
这是我的配置的复制/粘贴:
# Baseline configuration.
AUTH_LDAP_SERVER_URI = "127.0.0.1"
AUTH_LDAP_BIND_DN = "cn=admin,dc=nodomain"
AUTH_LDAP_BIND_PASSWORD = "admin"
AUTH_LDAP_USER_SEARCH = LDAPSearch("ou=users,dc=nodomain",
ldap.SCOPE_SUBTREE, "(uid=%(user)s)")
# Set up the basic group parameters.
AUTH_LDAP_GROUP_SEARCH = LDAPSearch("ou=django,ou=groups,dc=nodomain",
ldap.SCOPE_SUBTREE, "(objectClass=groupOfNames)"
)
AUTH_LDAP_GROUP_TYPE = GroupOfNamesType(name_attr="cn")
# Only users in this group can log in.
AUTH_LDAP_REQUIRE_GROUP = "cn=enabled,ou=django,ou=groups,dc=nodomain"
# Populate the Django user from the LDAP directory.
AUTH_LDAP_USER_ATTR_MAP = {
"first_name": "givenName",
"last_name": "sn",
"email": "mail"
}
AUTH_LDAP_PROFILE_ATTR_MAP = {
"employee_number": "employeeNumber"
} …Run Code Online (Sandbox Code Playgroud) 我想将ActiveDirectory数据库的用户导入Django.为此,我正在尝试使用django_auth_ldap模块.
这是我已经尝试过的:
在我的settings.py中:
AUTH_LDAP_SERVER_URI = "ldap://example.fr"
AUTH_LDAP_BIND_DN = 'cn=a_user,dc=example,dc=fr'
AUTH_LDAP_BIND_PASSWORD=''
AUTH_LDAP_USER_SEARCH = LDAPSearch('ou=users,dc=example,dc=fr', ldap.SCOPE_SUBTREE, '(uid=%(user)s)')
AUTH_LDAP_GROUP_SEARCH = LDAPSearch('ou=groups,dc=example,dc=fr', ldap.SCOPE_SUBTREE, '(objectClass=groupOfNames)')
AUTH_LDAP_GROUP_TYPE = ActiveDirectoryGroupType()
#Populate the Django user from the LDAP directory
AUTH_LDAP_USER_ATTR_MAP = {
'first_name': 'sAMAccountName',
'last_name': 'displayName',
'email': 'mail'
}
AUTHENTICATION_BACKENDS = (
'django_auth_ldap.backend.LDAPBackend',
'django.contrib.auth.backends.ModelBackend',
)
Run Code Online (Sandbox Code Playgroud)
然后我打电话python manage.py syncdb没有结果.没有警告,没有错误,auth_user表中没有更新任何内容.有什么明显的东西我忘记了吗?
我们有一个连接到多个MS SQL数据库实例的Django应用程序.每个应用程序都有一个router.py,用于处理将进程路由到每个数据库.
这是我第一次设置多个数据库访问.
Django内置应用程序通过此router.py路由到默认数据库:
class DjangoRouter(object):
"""
A router to control all database operations on models in the
auth application.
"""
def db_for_read(self, model, **hints):
"""
Attempts to read auth models go to auth.
"""
app_list = ('auth', 'admin', 'contenttypes', 'sessions',)
if model._meta.app_label in app_list:
return 'default'
return None
def db_for_write(self, model, **hints):
"""
Attempts to write auth models go to auth.
"""
app_list = ('auth', 'admin', 'contenttypes', 'sessions',)
if model._meta.app_label in app_list:
return 'default'
return None
def allow_relation(self, obj1, …Run Code Online (Sandbox Code Playgroud) 有两种方法可以使用Django Auth LDAP对用户进行身份验证
第一个涉及匿名或使用固定帐户连接到LDAP服务器并搜索身份验证用户的可分辨名称.然后我们可以尝试再次使用用户的密码绑定.
第二种方法是从用户名中导出用户的DN并尝试直接绑定用户.
我希望能够使用userid(sAMAccountName)和尝试访问应用程序的用户的密码进行直接绑定.如果有办法实现这个目的,请告诉我?目前,由于下面解释的问题,我似乎无法完成这项工作.
就我而言,LDAP中的用户DN具有以下格式
**'CN=Steven Jones,OU=Users,OU=Central,OU=US,DC=client,DC=corp'**
Run Code Online (Sandbox Code Playgroud)
这基本上转换为'CN = FirstName LastName,OU = Users,OU = Central,OU = US,DC = client,DC = corp'
这阻止我使用Direct Bind,因为用户的sAMAccountName是sjones,这是与用户名(%user)对应的参数,我无法找到一种方法来构建正确的AUTH_LDAP_USER_DN_TEMPLATE来派生用户的DN使用.
由于上面解释的问题,我现在使用Search/Bind,但这需要我在AUTH_LDAP_BIND_DN和AUTH_LDAP_BIND_PASSWORD中指定一个固定的用户凭证.
这是我当前的settings.py配置
AUTH_LDAP_SERVER_URI = "ldap://10.5.120.161:389"
AUTH_LDAP_BIND_DN='CN=Steven Jones,OU=Users,OU=Central,OU=US,DC=client,DC=corp'
AUTH_LDAP_BIND_PASSWORD='fga.1234'
#AUTH_LDAP_USER_DN_TEMPLATE = 'CN=%(user)s,OU=Appl Groups,OU=Central,OU=US,DC=client,DC=corp'
AUTH_LDAP_USER_SEARCH = LDAPSearchUnion(
LDAPSearch("OU=Users, OU=Central,OU=US,DC=client,DC=corp",ldap.SCOPE_SUBTREE, "(sAMAccountName=%(user)s)"),
LDAPSearch("OU=Users,OU=Regional,OU=Locales,OU=US,DC=client,DC=corp",ldap.SCOPE_SUBTREE, "(sAMAccountName=%(user)s)"),
)
AUTH_LDAP_USER_ATTR_MAP = {"first_name": "givenName", "last_name": "sn","email":"mail"}
AUTH_LDAP_GROUP_SEARCH = LDAPSearch("CN=GG_BusinessApp_US,OU=Appl Groups,OU=Central,OU=US,DC=client,DC=corp",ldap.SCOPE_SUBTREE, "(objectClass=groupOfNames)")
AUTH_LDAP_GROUP_TYPE = GroupOfNamesType()
AUTH_LDAP_REQUIRE_GROUP = 'CN=GG_BusinessApp_US,OU=Appl Groups,OU=Central,OU=US,DC=client,DC=corp'
Run Code Online (Sandbox Code Playgroud)
期待来自这里的精彩人士的一些指导.
python django active-directory django-authentication django-auth-ldap
我django-ldap-auth用来根据LDAP-Server(ActiveDirectory)对用户进行身份验证.用户能够登录并且每个用户的标志(例如is_staff)被正确设置.
我还想根据ldap-users组向我的django用户添加django-groups.这是我的设置:
import ldap
from django_auth_ldap.config import LDAPSearch, GroupOfNamesType, ActiveDirectoryGroupType
AUTH_LDAP_SERVER_URI = "ldap://XXX"
AUTH_LDAP_BIND_AS_AUTHENTICATING_USER = True
AUTH_LDAP_BIND_DN = ""
AUTH_LDAP_BIND_PASSWORD = ""
# I somewhere read that this should help, but it didn't:
#AUTH_LDAP_GLOBAL_OPTIONS = {
# ldap.OPT_REFERRALS: 0
#}
AUTH_LDAP_USER_SEARCH = LDAPSearch("ou=Benutzer,ou=Konten,ou=XXX,ou=XXX,dc=XXX,dc=XXX,dc=XXX",
ldap.SCOPE_SUBTREE, "(cn=%(user)s)")
AUTH_LDAP_USER_DN_TEMPLATE = "CN=%(user)s,OU=Benutzer,OU=Konten,OU=XXX,OU=XXX,DC=XXX,DC=XXX,DC=XXX"
# Set up the basic group parameters.
AUTH_LDAP_GROUP_SEARCH = LDAPSearch("OU=AnwenderRollen,OU=Gruppen,OU=XXX,OU=XXX,DC=XXX,DC=XXX,DC=XXX",
ldap.SCOPE_SUBTREE, "(objectClass=groupOfNames)"
)
AUTH_LDAP_GROUP_TYPE = GroupOfNamesType(name_attr="CN")
# also tried various possibilities for objectClass and AUTH_LDAP_GROUP_TYPE
#AUTH_LDAP_GROUP_TYPE …Run Code Online (Sandbox Code Playgroud) 我的设置:Django-3.0、Python-3.8、django_auth_ldap
我的组织中有 LDAP 服务器(Active Directory 服务器)。我正在构建一个 Django 应用程序,它为所有用户提供一些操作。
我知道 Django 具有内置的用户身份验证机制,但是如果用户存在于用户模型数据库中,它会进行身份验证。
但我的要求是。
所有用户条目都在 LDAP 服务器(Active Directory)中。使用正确的用户凭据 LDAP 服务器对我进行身份验证。
我在 Django 'accounts'应用程序中创建了一个登录页面,
1. 每当我从登录页面输入用户名和密码时,它应该使用我的组织 LDAP 服务器进行身份验证。
2. 登录后,我必须为登录用户保持 5 分钟的活动时间。(Django 身份验证会话)
我看到django_auth_ldap包为我的目的提供了一些见解。
我在settings.py 中有这些内容。
import ldap
##Ldap settings
AUTH_LDAP_SERVER_URI = "ldap://myldapserver.com"
AUTH_LDAP_CONNECTION_OPTIONS = {ldap.OPT_REFERRALS : 0}
AUTH_LDAP_USER_DN_TEMPLATE = "uid=%(user)s, OU=USERS,dc=myldapserver, dc=com"
AUTH_LDAP_START_TLS = True
#Register authentication backend
AUTHENTICATION_BACKENDS = [
"django_auth_ldap.backend.LDAPBackend",
]
Run Code Online (Sandbox Code Playgroud)
在views.py 中调用身份验证。
from django_auth_ldap.backend import LDAPBackend
def accounts_login(request):
username = ""
password …Run Code Online (Sandbox Code Playgroud)