capricornxl/ad-password-self-service

直接修改密码报错,扫码重置密码正常。

xwuchen opened this issue · 8 comments

在页面直接输入原密码,新密码修改,确认后报用户名或原密码错误(确定原密码正确),扫码重置密码能正常修改,不知道大神还有没有空看看什么原因?谢谢。

在页面直接输入原密码,新密码修改,确认后报用户名或原密码错误(确定原密码正确),扫码重置密码能正常修改,不知道大神还有没有空看看什么原因?谢谢。

你看下local_settings.py 配置中的

AD域控的DOMAIN名,例如:abc

AD_DOMAIN = r'修改成自己的'
这里的名称,是不是带了.com .net
这里的定义有点特殊,这是会给到AD登录认证用到。
比如我的域名是abc.com ,AD域应该是abc 那用户登录时应该是abc\zhangsan

多谢您的提醒,我确实加了.COM,删除后就正常,感谢感谢!

还有一个小问题想请教,在用企业微信扫码确认后,浏览器在后台加载open.work.weixin.qq.com时,响应非常慢,大概需要10秒钟左右才能打开重置密码页面,不知道会是什么原因?

还有一个小问题想请教,在用企业微信扫码确认后,浏览器在后台加载open.work.weixin.qq.com时,响应非常慢,大概需要10秒钟左右才能打开重置密码页面,不知道会是什么原因?

这个期间应该是在请求open.work.weixin.qq.com的接口,如果这个反应慢的话,看看是否网络问题。

扫码修改密码正常,首页直接修改密码报错。看了一下配置也没错。

`
During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/share/python-3.8.9/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
response = get_response(request)
File "/usr/share/python-3.8.9/lib/python3.8/site-packages/django/core/handlers/base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "./resetpwd/views.py", line 100, in index
auth_status, auth_result = AdOps().ad_auth_user(username=username, password=old_password)
File "./utils/ad_ops.py", line 94, in ad_auth_user
self.conn.search(search_base=BASE_DN, search_filter='(sAMAccountName={}))'.format(username), attributes=['pwdLastSet'])
File "/usr/share/python-3.8.9/lib/python3.8/site-packages/ldap3/core/connection.py", line 838, in search
request = search_operation(search_base,
File "/usr/share/python-3.8.9/lib/python3.8/site-packages/ldap3/operation/search.py", line 371, in search_operation
request['filter'] = compile_filter(parse_filter(search_filter, schema, auto_escape, auto_encode, validator, check_names).elements[0]) # parse the searchFilter string and compile it starting from the root node
File "/usr/share/python-3.8.9/lib/python3.8/site-packages/ldap3/operation/search.py", line 219, in parse_filter
raise LDAPInvalidFilterError('invalid filter')
ldap3.core.exceptions.LDAPInvalidFilterError: invalid filter
2021-11-12 10:28:55,725 ERROR ./resetpwd/views.py views.index 68: [异常] 请求方法:POST,请求路径/
2021-11-12 10:28:55,875 ERROR /usr/share/python-3.8.9/lib/python3.8/site-packages/django/utils/log.py log.log_response 224: Internal Server Error: /
Traceback (most recent call last):
File "./utils/ad_ops.py", line 74, in ad_auth_user
c_auth = Connection(server=server, user=r'{}{}'.format(self.domain, username), password=password, auto_bind=True, raise_exceptions=True)
File "/usr/share/python-3.8.9/lib/python3.8/site-packages/ldap3/core/connection.py", line 363, in init
self._do_auto_bind()
File "/usr/share/python-3.8.9/lib/python3.8/site-packages/ldap3/core/connection.py", line 389, in _do_auto_bind
self.bind(read_server_info=True)
File "/usr/share/python-3.8.9/lib/python3.8/site-packages/ldap3/core/connection.py", line 607, in bind
response = self.post_send_single_response(self.send('bindRequest', request, controls))
File "/usr/share/python-3.8.9/lib/python3.8/site-packages/ldap3/strategy/sync.py", line 160, in post_send_single_response
responses, result = self.get_response(message_id)
File "/usr/share/python-3.8.9/lib/python3.8/site-packages/ldap3/strategy/base.py", line 403, in get_response
raise LDAPOperationResult(result=result['result'], description=result['description'], dn=result['dn'], message=result['message'], response_type=result['type'])
ldap3.core.exceptions.LDAPInvalidCredentialsResult: LDAPInvalidCredentialsResult - 49 - invalidCredentials - None - 80090308: LdapErr: DSID-0C09041C, comment: AcceptSecurityContext error, data 773, v4563 - bindResponse - None
`

方便截图或贴下配置吗?可以把敏感信息用***注释掉部分。

配置文件如下,ldap用户已经加入域管理员组权限

`

字符串前面的格式编码不要去掉了,主要是为了解决特殊字符被转义的问题。

########## AD配置,修改为自己的

AD主机,可以是IP或主机域名,例如可以是: abc.com或172.16.122.1

AD_HOST = r'192.168.1.2'

AD域控的DOMAIN名,例如:abc

AD_DOMAIN = r'abcd'

用于登录AD做用户信息处理的账号,需要有修改用户账号密码或信息的权限。

AD账号,例如:pwdadmin

AD_LOGIN_USER = r'ldap'

密码

AD_LOGIN_USER_PWD = r'password'

BASE DN,账号的查找DN路径,例如:'DC=abc,DC=com',可以指定到OU之下,例如:'OU=RD,DC=abc,DC=com'。

BASE_DN = r'OU=rd,DC=abcd,DC=com'

是否启用SSL

AD_USE_SSL = True

连接的端口,如果启用SSL默认是636,否则就是389

AD_CONN_PORT = 636

扫码验证的类型

钉钉 / 企业微信,自行修改

值是:DING / WEWORK

SCAN_CODE_TYPE = 'WEWORK'

########## 钉钉 《如果不使用钉钉扫码,可不用配置》##########

钉钉接口主地址,不可修改

DING_URL = r'https://oapi.dingtalk.com'

钉钉企业ID ,修改为自己的

DING_CORP_ID = '修改为自己的'

钉钉企业内部开发,内部H5微应用或小程序,用于读取企业内部用户信息

DING_AGENT_ID = r'修改为自己的'
DING_APP_KEY = r'修改为自己的'
DING_APP_SECRET = r'修改为自己的'

移动应用接入 主要为了实现通过扫码拿到用户的unionid

DING_MO_APP_ID = r'修改为自己的'
DING_MO_APP_SECRET = r'修改为自己的'

####### 企业微信《如果不使用企业微信扫码,可不用配置》

企业微信的企业ID

WEWORK_CORP_ID = r'AAAAAAA'

应用的AgentId

WEWORK_AGENT_ID = r'100000'

应用的Secret

WEWORK_AGNET_SECRET = r'AAAAAAAAA'

Redis配置

redis的连接地址,redis://<Ip/Host>:/<数据库>

REDIS_LOCATION = r'redis://127.0.0.1:6379/1'
REDIS_PASSWORD = r''

COOKIE超时时间,单位是秒,可不用修改

TMPID_COOKIE_AGE = 300

主页域名,钉钉跳转等需要指定域名,格式:pwd.abc.com。

如果是自定义安装,请修改成自己的域名

HOME_URL = '10.10.10.10'
`

raise LDAPInvalidFilterError('invalid filter')
ldap3.core.exceptions.LDAPInvalidFilterError: invalid filter

ldap filter error:
我现在怀疑是BASE_DN的配置问题,你改成BASE_DN = r'DC=abcd,DC=com'试下。
如果是通过首页修改密码,是需要验证当前用户的旧密码可以登录ladp,如果用户的的属性在过滤属性之后就无法查找到了吧。