사용자 또는 관리자가 LDAP 암호를 변경하려고 C# 코드를 수행하고 있습니다. 사용자를 성공적으로 인증 할 수 있습니다.LDAP : 암호를 변경할 수 없습니다.
의 InnerException : : 디렉터리 속성이 캐시에서 찾을 수 없습니다 나는
ChangePassword
또는SetPassword
동작을 호출 할 때, 나는 다음과 같은 오류 메시지가 나타납니다.LDAPPath = "LDAP://10.29.0.1:50405/DC=DCServerName,DC=local" LDAPAdminDN = "CN=useradmin,OU=SystemAccounts,DC=DCServerName,DC=local" LDAPAdminPwd = "S8kf5t3!" username = "user1" password = "oldPassword1" npassword = "newPassword1" DirectoryEntry root = new DirectoryEntry( LDAPPath, LDAPAdminDN, LDAPAdminPwd, AuthenticationTypes.None ); using (root) { DirectorySearcher searcher = new DirectorySearcher(root, string.Format("(CN={0})", username) ); var result = searcher.FindOne(); if (result != null) { var user = result.GetDirectoryEntry(); try { user.Invoke("ChangePassword", new object[] { password, npassword }); user.Properties["LockOutTime"].Value = 0; //user.Invoke("SetPassword", new object[] { npassword }); user.CommitChanges(); } catch (Exception e) { string innerMsg = e.InnerException.Message; return false; } }
내가 성공적으로 암호를 변경하려면이 문제를 해결하는 방법에 대해 궁금 다음과 같이
내 코드입니다. 나는 다음과 같이 몇 가지 옵션을 시도 하지만 그들 모두가 작동하지 않습니다 : 하나 :
int intPort = 50405;
user.Invoke("SetOption", new object[] { ADS_OPTION_PASSWORD_PORTNUMBER, intPort });
user.Invoke("SetOption", new object[] { ADS_OPTION_PASSWORD_METHOD, ADS_PASSWORD_ENCODE_CLEAR });
2 :
user.UsePropertyCache = true;
그들은 모두 오류가 너희들
업데이트 감사 0x80072020
IT 담당자가 "nonSSL에서 비밀번호 변경"을 사용 설정했는데 설정이 잘못되었습니다. m AD LDS 부분에 입력하십시오.
질문 : 가장 자리가 잘못된 코드 대신이 방법으로 사용자의 비밀번호를 변경하려면 admin 계정을 사용하는 것이 맞습니까?
그러나 각 사용자마다 UPN이 설정되어 있지 않습니다. UserPrincipal을 사용하는 것이 문제가됩니까? 또한 AD 도메인 모델을 사용하지 않습니다. 따라서 ContextType은 ApplicationDirectory에 관한 것입니다. –
@HanYiZhang : *** NO! *** 그냥 사용하십시오 - 잘 작동합니다!SAM 계정 이름, 표시 이름 및 몇 가지 추가 속성으로 사용자를 검색 할 수 있습니다. UPN의 존재 여부는 ***이 아닙니다 *** 요구 사항 –
감사합니다. DN을 사용하여 LDAP 서버 통신에 대한 응답을 편집 할 수 있습니까? DN 형식으로 ID를 찾으려고했지만이 사용자를 찾을 수 없습니다. –