Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python LDAP:';填充Django用户';导致错误';访问权限不足';_Python_Django_Authentication_Ldap_Django Auth Ldap - Fatal编程技术网

Python LDAP:';填充Django用户';导致错误';访问权限不足';

Python LDAP:';填充Django用户';导致错误';访问权限不足';,python,django,authentication,ldap,django-auth-ldap,Python,Django,Authentication,Ldap,Django Auth Ldap,我试图针对LDAP服务器对Django应用程序进行身份验证,并收到一些奇怪的行为。请记住,我对LDAP了解不多,所以如果我误用了一些LDAP术语,请原谅。还要注意,在整个问题中,my_domain是我公司的域名,user_id是身份验证用户的uid 以下是my settings.py配置文件的相关部分: AUTHENTICATION_BACKENDS = [ 'django_auth_ldap.backend.LDAPBackend' ] AUTH_LDAP_SERVER_URI = '

我试图针对LDAP服务器对Django应用程序进行身份验证,并收到一些奇怪的行为。请记住,我对LDAP了解不多,所以如果我误用了一些LDAP术语,请原谅。还要注意,在整个问题中,my_domain是我公司的域名,user_id是身份验证用户的uid

以下是my settings.py配置文件的相关部分:

AUTHENTICATION_BACKENDS = [
    'django_auth_ldap.backend.LDAPBackend'
]
AUTH_LDAP_SERVER_URI = 'ldaps://ipa.my_domain.com:636'

AUTH_LDAP_USER_DN_TEMPLATE = "uid=%(user)s,cn=users,cn=accounts,dc=my_domain,dc=com"

AUTH_LDAP_USER_FLAGS_BY_GROUP = {
    "is_active": "cn=all,cn=groups,cn=accounts,dc=my_domain,dc=com",
    "is_staff": "cn=all,cn=groups,cn=accounts,dc=my_domain,dc=com",
    "is_superuser": "cn=all,cn=groups,cn=accounts,dc=my_domain,dc=com"
}

AUTH_LDAP_ALWAYS_UPDATE_USER = True
AUTH_LDAP_GROUP_TYPE = GroupOfNamesType()

AUTH_LDAP_GROUP_SEARCH = LDAPSearch("cn=groups,cn=accounts,dc=my_domain,dc=com",
    ldap.SCOPE_SUBTREE, "(objectClass=member)"
)

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"}
当我尝试登录到我的应用程序时,我收到以下错误:

填充Django用户id 搜索返回了1个对象:uid=user\u id,cn=users,cn=accounts,dc=my\u domain,dc=com,0,“(objectClass=*)”)返回了1个对象:uid=user\u id,cn=users,cn=accounts,dc=my\u domain,dc=com 在验证用户\u id:访问权限不足({'desc':'访问权限不足'})时捕获Ldaperor

但是,当我将此标志从True翻转为false时:

AUTH_LDAP_ALWAYS_UPDATE_USER = False
身份验证成功。奇怪的是,即使身份验证成功,我的属性也没有映射到Django用户对象(在
AUTH\u LDAP\u User\u ATTR\u MAP={“first\u name”:“givenName”,“last\u name”:“sn”}
中指定的属性)。当我手动检查
request.user.ldap\u user.attrs时,所有属性都在那里

现在问题来了,“填充Django用户”到底意味着什么?是什么导致了“访问不足”错误?为什么翻转该标志可以修复(隐藏)问题


谢谢。

通过将此行添加到我的settings.py文件中,我可以解决所有问题:

AUTH_LDAP_BIND_AS_AUTHENTICATING_USER = True
我一直打算绑定为身份验证用户。我没有要绑定的服务帐户,如果以匿名用户身份绑定到我公司的LDAP设置,则某些信息不可用。显然,发生的事情是在身份验证之后,使用匿名绑定对AUTH_LDAP_bind_DN进行了重新绑定,当然我没有指定。不允许匿名绑定访问组信息和其他详细信息,从而导致访问不足错误

默认情况下,所有LDAP操作都是使用AUTH_LDAP_BIND_DN和AUTH_LDAP_BIND_密码凭据执行的,而不是用户的。否则,LDAP连接将在登录请求期间绑定为身份验证用户,在其他请求期间绑定为默认凭据,因此根据Django视图的性质,您可能会看到不一致的LDAP属性。如果您愿意接受不一致性,以便在绑定为身份验证用户时检索属性,请参阅AUTH_LDAP_BIND_as_authentication_user

文档中关于以下内容的附加详细信息:

默认值:False

如果为True,身份验证将使LDAP连接绑定为 验证用户,而不是强制它与 身份验证成功后的默认凭据。这可能是 如果您没有能够 访问用户的属性。django auth ldap从不存储用户的 密码,因此这仅适用于用户所在的请求 认证的。因此,此设置的缺点是LDAP会导致 可能会根据用户是否已在系统中进行了早期身份验证而有所不同 Django视图,这可能会让不直接相关的代码感到惊讶 使用身份验证