django - 如何使用 django-auth-ldap 实现身份验证?

标签 django ldap django-authentication openldap django-auth-ldap

我有一个使用 django 运行的应用程序。
现在我只希望通过 openldap 服务器进行身份验证的用户看到“他们的 View ”(因此我只在成功身份验证后才需要他们的 uid)

我怎样才能做到这一点?

我想 django-auth-ldap 是要走的路,所以我尝试了一整天来了解身份验证实际发生的位置以及如何获取请求 View 的用户的 uid。

我用了 documentation for the settings.py但我不知道如何“实际使用”它。也许有人可以指出我正确的方向?

设置.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"

(顺便说一句:我已经可以使用 python-ldap 执行 ldap-searche 并在命令行上获得类似 ldapsearch 的结果,所以其他一切都很好......)

我的观点需要什么?

感谢您的帮助!

最佳答案

这是我们网站之一的片段。

# Django Auth Ldap
main_dn = 'dc=____,dc=organisation,dc=com'
groups_dn = 'ou=Groups,'+main_dn
users_dn = 'ou=Users,'+main_dn

AUTHENTICATION_BACKENDS = (
    'django_auth_ldap.backend.LDAPBackend',
    'django.contrib.auth.backends.ModelBackend',
)

AUTH_LDAP_SERVER_URI = "ldap://ldap.organisation.com"
AUTH_LDAP_BIND_DN = 'cn=___,'+main_dn
AUTH_LDAP_BIND_PASSWORD = "__________________"
AUTH_LDAP_USER_SEARCH = LDAPSearch(users_dn, 2, "(uid=%(user)s)")
AUTH_LDAP_USER_ATTR_MAP = {
    "first_name": "givenName",
    "last_name": "sn",
    "email": "mail"
}
AUTH_LDAP_MIRROR_GROUPS = True
AUTH_LDAP_ALWAYS_UPDATE_USER = True
AUTH_LDAP_GROUP_TYPE = PosixGroupType()
AUTH_LDAP_GROUP_SEARCH = LDAPSearch(groups_dn, ldap.SCOPE_SUBTREE, "(objectClass=posixGroup)")

AUTH_LDAP_USER_FLAGS_BY_GROUP = {
    "is_staff":         "cn=admins,"+groups_dn,
    "is_superuser":     "cn=developers,"+groups_dn,
}

编辑:

由于问题是“我的 View 中需要什么?”,答案是此配置会将用户的 uid 保存为 User 模型上的用户名字段,因此在您的 View 中,您需要
uid = request.user.username

希望这能让你启动并运行。

关于django - 如何使用 django-auth-ldap 实现身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15669161/

相关文章:

java - Spring LDAP 空指针异常

ldap - 使用 SASL 的 Gitlab LDAP

django - 使用 Django factory_boy 进行测试中的用户身份验证

python - Django 允许具有端口号的主机

python - Django:celery 任务不使用 .delay() 执行

django - 无法使用 Docker 数据库 : 'could not translate host name "db"to address: Name or service not known' 在 VS Code 中调试 Django 应用程序

django - 抑制 django 的 login_required 装饰器中的 "?next=blah"行为

django - Django 的 request.POST 对象中的数据是否经过净化,至少足以在 ORM 查询中直接使用?

ldap - CAS LDAP 搜索子树

django - 如何设置 Django auth.login session 长度/年龄?