python - django 中的 LDAP 身份验证错误

标签 python django authentication ldap django-login

我正在开发一个 Django 应用程序,必须合并 LDAP 身份验证机制。目前我的文件看起来像:

---设置.py

import ldap  
from django_auth_ldap.config import LDAPSearch    

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

AUTH_LDAP_SERVER_URI = 'ip_address'
AUTH_LDAP_BIND_DN = 'cn=admin,dc=******,dc=com'
AUTH_LDAP_BIND_PASSWORD = '*****'
AUTH_LDAP_USER_SEARCH = LDAPSearch("ou=Users,dc=*****,dc=com",ldap.SCOPE_SUBTREE,"(uid = (%Users))" )

AUTH_LDAP_ALWAYS_UPDATE_USER = True

AUTH_LDAP_USER_ATTR_MAP = {
       "first_name": "givenName",
       "last_name": "sh",
       "email": "mail" 
}

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

----urls.py

urlpatterns = [    
    url(r'^info/$','django.contrib.auth.views.login',{'template_name': 'auth.html'}),
    url(r'^info/login/$',login),]

----auth.html

<html>
    <head>      
        <title>Login</title>
    </head>
    <body>
        <form action="login/" method="post">{%csrf_token%}
            Email address: <input type="text" name="email"/>
            Password: <input type="password" name="password" />
            <input type="submit" value="Log in" />
        </form>
    </body>
</html>

---- View .py

def login(request):  
     user = authenticate( username= request.REQUEST.get('email'), password= request.REQUEST.get('password')) #email and password supplied through auth.html  
     if user is not None:  
            return getInfo(request)
     else:
                return render(request,'invalidUser.html')

目前我出于测试目的在本地主机上使用它,但是 AUTH_LDAP_SERVER_URI 中的 LDAP ip_address 对公司是公开的(我从管理员那里得到了这个)。当我尝试登录时,使用相同设置抛出的错误是:
1. 验证 anshul 时捕获 LDAPError: LDAPError(0, 'Error')
或者
2. 验证anshul时捕获LDAPError: LDAPError(2, 'No such file or directory')

我的问题是:
1. 为什么第一个错误的错误和含义?是因为 LDAP 没有我的访问权限吗?
2.

的目的是什么
    import logging
    logger = logging.getLogger('django_auth_ldap')
    logger.addHandler(logging.StreamHandler())
    logger.setLevel(logging.DEBUG)

在 settings.py 中?

这是我第一次使用 Django。是因为配置不当还是我无法通过本地主机访问 AUTH_LDAP_SERVER_URI 并使用当前设置直接部署到实际服务器上?

最佳答案

AUTH_LDAP_SERVER_URI是一个 URI,而不是一个裸 IP 地址。例如,ldap://localhost/。如果您不确定某个值,请打开 Python shell 并对其进行测试:

> import ldap
> conn = ldap.initialize('ldap://<host-or-ip>/')

此外,AUTH_LDAP_USER_SEARCH应该包含 %(user)s,而不是 %(Users)

日志记录配置只是将 django_auth_ldap 调试输出连接到您的控制台,以便您可以看到它。 Python/Django 中的默认日志记录设置只会吃掉输出。现在,您还可以在 Django 的 LOGGING 中进行设置设置。

关于python - django 中的 LDAP 身份验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31468461/

相关文章:

angularjs - Express/Passport 本地认证多台服务器

python - 在 Python 中创建包含多个子包的包

python - *args 可以在关键字参数之后使用吗

python - 如何使用 Pandas 将多索引系列连接到单个索引数据框?

python - Pandas 字符串系列到张量的 int 标准化

php - Android - 连接到 wamp = 服务器问候错误

数据库模式更改的 Java 等效项,例如 Django 的 South?

python - 在 Django/sqlite 中更改 text_factory

django - DRF 嵌套序列化器 - 过滤子序列化器上的数据

php - Symfony 4.4 Auth0如何从应用程序中完全注销用户