2011-01-17 5 views
1

ActiveDirectoryMembershipProvider의 ValidateUser 메서드를 사용하여 사용자가 AD에 있는지 확인하고 싶습니다.ActiveDirectoryMembershipProvider를 사용하여 사용자의 유효성을 검사하십시오.

양식의 사용자 이름과 암호를 가져오고 있습니다. 나는 다음

<add name="ADConnection" connectionString="LDAP://test.test.test.com/dc=test,dc=com" /> 

내가하고 싶은 일을하기 위해 .. 공급자를 인스턴스화하고 난 그냥 게시물에 대한 테스트와 실제 값을 대체 ValidateUser

<add name="AspNetActiveDirectoryMembershipProvider" 
    type="System.Web.Security.ActiveDirectoryMembershipProvider" 
    connectionStringName="ADConnection" 
    attributeMapUsername = "userPrincipalName" /> 

전화 싶습니다 내가 제공해야 할 사용자 이름과 암호를 공급자에게 알려서 시스템 계정과 같이 연결할 수 있도록 한 번 설치 한 다음 유효성을 검사하려는 사용자를 확인할 수 있습니까? 당신이 정의한 하나 바로 Membership에서 사용할 수 있습니다 -

감사합니다, J는 ASP.NET 멤버쉽 시스템으로

답변

10

는, 요점은 당신이 공급자 클래스 또는 아무것도 인스턴스화 할 필요가 없습니다 것입니다 정적 인스턴스.

따라서 귀하의 경우, 단지 설정이 올바른지, 다음과 같은 일을 할 수 있는지 확인하십시오

if (Membership.ValidateUser(UsernameTextbox.Text, PasswordTextbox.Text)) 
    FormsAuthentication.RedirectFromLoginPage(UsernameTextbox.Text, NotPublicCheckBox.Checked); 
else 
    Msg.Text = "Login failed. Please check your user name and password and try again."; 

Membership 당신이 정의한 필요한 클래스가 될 것 - 단지에 정적 메소드를 호출하고 그것으로 끝내라! 그것은 당신이 쉽게 여기 라인을 따라 여러 멤버 자격 공급자를 초기화 할 수 있어야 나타납니다 : :-)

업데이트 그러니까 기본적으로

if (e.UserName.IndexOf("@contoso.com") >= 0) 
    { 
     e.Authenticated = Membership.Providers["ContosoSqlProvider"].ValidateUser(e.UserName, e.Password); 
    } 
    else if (e.UserName.IndexOf("@fabrikam.com") >= 0) 
    { 
     e.Authenticated = Membership.Providers["FabrikamSqlProvider"].ValidateUser(e.UserName, e.Password); 
    } 
    else 
    { 
     e.Authenticated = Membership.Provider.ValidateUser(e.UserName, e.Password); 
    } 

, 당신은 Membership.Providers["FabrikamSqlProvider"]를 통해 액세스하여 특정 멤버 자격 공급자를 얻을 수 있습니다 그런 다음에 .ValidateUser()과 같은 메소드를 호출하십시오.

기본 Membership.ValidateUser은 단순히 기본으로 정의한 멤버 자격 공급자를 사용하지만 다른 사용자를 사용하지 못하도록 막지는 않습니다.

+0

감사합니다.하지만 사용하고자하는 유일한 공급자가 아니므로 SqlMembershipProvider를 사용하여 다른 사용자를 SQL 저장소에 대해 유효성을 검사하므로 인스턴스를 만들어야합니다. 기본적으로 SQL을 선택할 수 있습니다. 하나의 . – John

+0

@ 존 : 내 대답 업데이트 - 당신이 이미 그것을 찾지 못했다면 당신의 질문에 대한 해결책이 있기를 바랍니다. –