首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django-auth-ldap认证失败

django-auth-ldap认证失败
EN

Stack Overflow用户
提问于 2016-10-14 17:35:11
回答 2查看 10.5K关注 0票数 5

我试图在我的项目(Django 1.6,Python2.7)中使用Django-8月-Ldap,但它不起作用。

我的活动目录shema是:

  1. 我已经通过安装ldap-utils包在cmd行上测试了连接。 sudo apt ldap-utils ldapsearch 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 con = ldap.initialize('ldap://domain.com') con.simple_bind_s('User_mail','User_password')结果= con.search_s('ou=Users,ou=Resources,ou=Company,dc=domain,dc=com',ldap.SCOPE_SUBTREE,(cn=User_name))

python-ldap连接工作正常。

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

settings.py:

代码语言:javascript
复制
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',
)

views.py:

代码语言:javascript
复制
from django_auth_ldap.backend import LDAPBackend
auth = LDAPBackend()
user = auth.authenticate(username="User_name", password="User_password")

在django-ldap-调试器日志文件中,我有以下错误:

代码语言:javascript
复制
Caught LDAPError while authenticating User_name: INVALID_CREDENTIALS({'info': '80090308: LdapErr: DSID-0C0903A9, comment: AcceptSecurityContext error, data 52e, v1db1', 'desc': 'Invalid credentials'},)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-17 16:44:39

我找到了答案。

我通过添加( AUTH_LDAP_BIND_DN )更改了OU=Users

AUTH_LDAP_USER_SEARCH中,我必须使用samAccountName而不是CN

我的新settings.py:

代码语言:javascript
复制
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',
)

我的views.py

代码语言:javascript
复制
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()

    ....

希望这对所有人都有帮助:)

票数 10
EN

Stack Overflow用户

发布于 2021-09-22 15:09:33

我有类似的问题,但我已经解决了相反的方法。在AUTH_LDAP_BIND_DN下刚刚把用户和域名和密码放在一起。从那以后这就像魅力一样运作..。

当我调查我的ldaps问题时,我发现上面的解决方案某种程度上是有用的,也许也有人会从我的解决方案中受益。

代码语言:javascript
复制
LDAP_IGNORE_CERT_ERRORS = True
AUTH_LDAP_START_TLS = False

AUTH_LDAP_SERVER_URI = "ldaps://domain.com:636" 
AUTH_LDAP_BIND_DN = "serviceaccount@domain.com"
AUTH_LDAP_BIND_PASSWORD = "superPass"
AUTH_LDAP_USER_SEARCH = LDAPSearch(
        "OU=Company,DC=domain,DC=com",ldap.SCOPE_SUBTREE,"(sAMAccountName=%(user)s)"
        )

AUTH_LDAP_USER_ATTR_MAP = {
       "first_name": "givenName",
       "last_name": "sn",
       "email": "mail"
       }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40048962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档