django-auth-ldap 身份验证失败

2024-02-10

我正在尝试使用Django-Auth-Ldap https://pythonhosted.org/django-auth-ldap/在我的项目(Django 1.6,Python 2.7)中,但它不起作用。

我的活动目录模式是:

  1. 我已经通过安装 ldap-utils 包在命令行上测试了连接

    sudo apt-get install ldap-utils
    
    ldapsearch -H ldap://domain.com -D "ou=Resources,ou=Company, dc=domain,dc=com" -U "user_name" -w "user_password" -v -d 1
    

连接测试工作正常。

  1. 我正在使用下面的代码从 shell 测试 python-ldap 连接:

    import ldap
    
    con = ldap.initialize('ldap://domain.com')
    
    con.simple_bind_s('User_mail', 'User_password')
    
    results = con.search_s('ou=Users,ou=Resources,ou=Company,dc=domain,dc=com', ldap.SCOPE_SUBTREE, "(cn=User_name)")
    

python-ldap 连接工作正常。

  1. 我的问题是如何从 django 登录界面对 AD 用户进行身份验证?

设置.py:

import ldap 
from django_auth_ldap.config import LDAPSearch

# The URL of the LDAP server.
AUTH_LDAP_SERVER_URI = "ldap://domain.com"
AUTH_LDAP_BIND_DN = "cn='User_name',ou=Resources,ou=Company,dc=domain,dc=com"   
AUTH_LDAP_BIND_PASSWORD = "User_password"
AUTH_LDAP_USER_SEARCH = LDAPSearch("ou=Users,ou=Resources,ou=Company,dc=domain,dc=com",ldap.SCOPE_SUBTREE, "(cn=%(user)s)")    
AUTH_LDAP_GLOBAL_OPTIONS = { ldap.OPT_REFERRALS : False }

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

视图.py:

from django_auth_ldap.backend import LDAPBackend
auth = LDAPBackend()
user = auth.authenticate(username="User_name", password="User_password")

在文件 django-ldap-debug.log 中我有这个错误:

Caught LDAPError while authenticating User_name: INVALID_CREDENTIALS({'info': '80090308: LdapErr: DSID-0C0903A9, comment: AcceptSecurityContext error, data 52e, v1db1', 'desc': 'Invalid credentials'},)

我找到了答案。

我改变了AUTH_LDAP_BIND_DN通过添加(OU=用户)

我必须使用 samAccountName 而不是 CNAUTH_LDAP_USER_SEARCH

我的新设置.py:

import ldap, logging
from django_auth_ldap.config import LDAPSearch

logger = logging.getLogger('django_auth_ldap')
logger.addHandler(logging.StreamHandler())
logger.setLevel(logging.DEBUG)

AUTH_LDAP_SERVER_URI = "ldap://domain.com"
AUTH_LDAP_BIND_DN = "CN=User_name,OU=Users,OU=Resources,OU=Company,DC=domain,DC=com"
AUTH_LDAP_BIND_PASSWORD = "User_password"
AUTH_LDAP_USER_SEARCH = LDAPSearch("OU=Users,OU=Resources,OU=Company,DC=domain,DC=com",ldap.SCOPE_SUBTREE, "(samAccountName=%(user)s)")

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

我的观点.py

from django_auth_ldap.backend import LDAPBackend

def login(request):  
    if request.method == 'POST':
        form = MyLoginForm(data=request.POST)
        if form.is_valid():
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']            
            auth = LDAPBackend()
            user = auth.authenticate(username=username, password=password)
            if user is not None:
                ....
    else:
        form = MyLoginForm()

    ....

希望这对大家有帮助:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

django-auth-ldap 身份验证失败 的相关文章

随机推荐

  • UIViewContentModeScaleAspectFit iphone sdk 提供质量差的图像

    希望快一点吗 我正在创建一个自定义 uitableviewcell 并添加了一个图像视图 我有一些尺寸约为 200x200 的 PNG 图像 我想创建一个缩略图以放入表格视图中 但是当我调整图像大小时 会导致图像质量较差 I use UIV
  • React 组件的推断泛型类型

    Typescript 对于推断泛型类型非常有用 例如 如果我编写以下代码 class AwesomeClass
  • Android 键盘打开时防止文档重排/浏览器调整大小

    这是针对 HTML5 Javascript Web 应用程序 而不是本机 Android 应用程序 当 android 软键盘打开时 如何防止浏览器 DOM 调整我的内容大小 响应式 主要是 vw vh 大小等 发生的情况是 一旦打开键盘
  • 如何将 .sks 文件添加到现有 Swift/Sprite-Kit 项目?

    我开始遵循 Ray Wenderlich 的 太空入侵者 教程 但分歧很大 我现在有 3 个 SKScene 我的标题屏幕 我的主游戏屏幕和我的最终关卡 游戏结束屏幕 我添加了标题屏幕和游戏结束场景 它们都有 sks 文件 主游戏屏幕没有
  • Javascript:控制 Google Chrome 打开选项卡音频音量控制

    有没有办法程序化联盟无论 Web 应用程序是如何设计的 HTML5 音频元素还是 Flash 等 我想要控制选项卡上的音频级别吗 只是为了明确起见 我不打算研究网页中的某些 id 元素 或其他任何内容 而是像 Chrome ThisAudi
  • Python 中的文件排序

    我想根据数值对 Python 中的文件进行排序 我的输入文件如下所示 66135 A 65117 B 63301 C 63793 D 输出应该是 63301 C 63793 D 65117 B 66135 A 怎么做 f2 writelin
  • Solr 使用 contains 进行搜索,听起来像

    问题 我在 solr 中有一个电影信息 两个字符串字段定义电影标题和导演姓名 复制字段定义 solr 默认搜索的另一个字段 我想要像谷歌一样的搜索 范围有限 如下所示 如何实现它 1 如何在solr中搜索包含 例如 a 如果电影导演的名字是
  • VS 2008 中的包装程序集密钥文件设置在哪里?

    我正在尝试构建一个强命名的应用程序 它引用了我通过 添加引用 对话框添加的 COM 互操作库 已经有一段时间了 但我似乎记得在旧版本的 Visual Studio 中 有一个项目设置包装组件密钥文件 我在 Visual Studio 200
  • Java Stream:查找具有属性最小/最大值的元素

    我有一个对象流 我想找到具有某些属性最大值的对象 而计算成本很高 作为一个具体的简单示例 假设我们有一个字符串列表 我们想要找到最酷的一个 给定一个coolnessIndex功能 以下应该有效 String coolestString st
  • glTexImage2D 与 gluBuild2DMipmaps

    非常基本的 OpenGL 纹理创建代码 int width height BYTE data FILE file open texture data file fopen filename rb if file NULL return 0
  • 使用 API 平台允许 json 中存在 NULL 值

    我目前拥有该实体 我想展示我的财产firedDate在我的 JSON 中 该值甚至为 null ApiResource normalizationContext groups employee ApiFilter DateFilter cl
  • 平滑 ggplot2 中的 geom_tile 地图 - 插值数据

    I m trying to plot an spatial map from a lon lat data set Following the example in https stackoverflow com a 19339663 70
  • 从主线程终止辅助线程(可可)

    我正在 cocoa 框架的帮助下开发一个用 Objective C 编写的小型应用程序 但遇到了多线程问题 如果有人可以帮助我提供一些关于如何从主线程终止辅助 工作 线程的指导 我将非常感激 IBAction startWorking id
  • Discord js / 检查用户是否在特定语音频道中

    我希望我的机器人使用 const voiceChannel message member voice channel const voiceChannelID message member voice channelID if voiceC
  • 列出从文件输入中选择的文件

    我想列出从文件输入中选择的文件 div class fileUpload myButton span Upload span div
  • VS2012 nmake 使用 v110_xp 工具集?

    有没有办法使用v110 xp使用 nmake 编译时的工具集 而不是默认的 v110 我正在尝试为 VisualStudio2012 编译 Qt5 库 并且我也需要它在 Windows XP 计算机上工作 我已经成功地使用 VS2012 和
  • 调用函数而不等待它

    你好 我想知道是否有一种方法可以调用函数 方法 最好是Python或Java 并继续执行而不等待它 Example def a b call a function b return something def b something tha
  • 在运行时替换 QWidget 对象

    在我的应用程序中 我必须用自定义的 QLineEdit 替换所有 QLineEdit 元素 为此 有不同的解决方案 修改从 pyuic4 生成的 py 文件 并将所有 QLineEdit 对象替换为我的一个 LineEdit 这个解决方案并
  • Google Spreadsheet API v4 使用“ApiKey”在电子表格中“添加行”

    我正在尝试使用 Google Spreadsheet API v4 直接使用 ApiKey 在电子表格中 添加行 而不使用 OAuth 2 0 如果我使用 OAuth 2 0 它成功 添加行 但我的要求是使用 ApiKey 参考了这个网址
  • django-auth-ldap 身份验证失败

    我正在尝试使用Django Auth Ldap https pythonhosted org django auth ldap 在我的项目 Django 1 6 Python 2 7 中 但它不起作用 我的活动目录模式是 我已经通过安装 l