2011-04-07 8 views
0

다른 문제를 해결하기 위해 System.DirectoryServices.AccountManagement 네임 스페이스에서 직접 부트 스트랩하려고합니다. 그물에서 나는 광고에서 "ChangePasswordOnNextLogon"플래그를 토글하고 싶고이 네임 스페이스는보기 쉽게 만들었다.System.DirectoryServices.AccountManagement 부트 스트랩 자신

그래서 나는 AdMembershipProvider을 사용하여 로그인하는 데 사용하는 것과 동일한 사용자 및 암호를 사용하여 시도해 보았습니다. 이 FindByIdentity에 도달 할 때

PrincipalContext oPrincipalContext = 
    new PrincipalContext(ContextType.Domain, "10.1.XXX.XXX", "DC=XXXXXXXX,DC=ORG", 
         ContextOptions.SimpleBind, AUserThatWorks, APasswordThatWorks); 

UserPrincipal oUserPrincipal = 
    UserPrincipal.FindByIdentity(oPrincipalContext, AdUserName); 

// we need to see if they can authenticate before changing password,so we have to turn this off manually. - EWB 
oUserPrincipal.RefreshExpiredPassword(); 

bool b = oPrincipalContext.ValidateCredentials(AdUserName, AdPassword); 

if (!b) 
    oUserPrincipal.ExpirePasswordNow(); 

return b; 

는하지만 "나쁜 사용자 또는 암호"오류가 발생합니다.

사용자가 다른 곳에서 일하기 때문에 주체 컨텍스트를 얻는 다른 매개 변수 중 하나가되어야한다고 생각합니다. 누구든지 나 한테 어떤 힌트가있어? URL의 infront LDAP를 넣으려고했지만 연결에 실패했습니다. 나는 혼란 스럽다.

감사합니다,

정확 합니

답변

0

는 PrincipalContext 라인을 단순화하십시오 :

PrincipalContext oPrincipalContext = new PrincipalContext(ContextType.Domain, "XXXXXX.org", AUserThatWorks, PasswordThatWorks); 

이 도메인이 XXXXXXX.org 가정합니다. 또한 사용자 이름 앞에 도메인을 넣을 수도 있습니다 (예 : "XXXXXX.org \ username").

관련 문제