我正在尝试针对 LDAP 服务器对 Django 应用程序进行身份验证,并且收到一些奇怪的行为。请记住,我对 LDAP 了解不多,所以如果我误用了一些 LDAP 术语,请见谅。另请注意,在整个问题中,my_domain 是我公司的域名,user_id 是身份验证用户的 uid。
这是我的 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 用户 user_id search_s('uid=user_id,cn=users,cn=accounts,dc=my_domain,dc=com', 0, '(objectClass=*)') 返回 1 个对象:uid=user_id,cn=users, cn=accounts,dc=my_domain,dc=com 在验证 user_id 时捕获 LDAPError: INSUFFICIENT_ACCESS({'desc': 'Insufficient access'},)
但是,当我将此标志从 True 翻转为 false 时:
AUTH_LDAP_ALWAYS_UPDATE_USER = False
认证成功。现在这是奇怪的部分:即使身份验证成功,我的属性也没有映射到我的 Django User 对象(在 中指定的那些AUTH_LDAP_USER_ATTR_MAP = {"first_name": "givenName", "last_name": "sn"}
)。当我手动检查request.user.ldap_user.attrs
所有属性时。
现在问题来了,“填充 Django 用户”到底是什么意思?是什么导致了“INSUFFICIENT_ACCESS”错误,为什么翻转那个标志会修复(隐藏?)问题?
谢谢。