2011-01-17 5 views
1

Я хотел бы использовать метод ActiveDirectoryMembershipProvider ValidateUser для проверки того, что пользователь существует в AD.ActiveDirectoryMembershipProvider для проверки пользователя

Я беру имя пользователя и пароль в форме. Я хотел бы, чтобы затем создать экземпляр поставщика и вызвать ValidateUser

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

Я просто заменить реальные значения с помощью теста на пост ..

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

Для того, чтобы делать то, что я хочу сделать, мне нужно, чтобы обеспечить имя пользователя и пароль для провайдера, чтобы он мог подключаться на первом месте, то есть системная учетная запись .. и после ее установки я могу проверить пользователя, которого я хочу проверить?

Спасибо, J

ответ

10

С системой членства ASP.NET, все дело в том, что вам не нужно, чтобы создать экземпляр класса поставщика или что-нибудь - тот, что вы определили доступен сразу под Membership статический экземпляр.

Так что в вашем случае, просто убедитесь, что конфигурация является правильным, а затем сделать что-то вроде:

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 будет необходимый класс вы определили - просто вызвать статические методы на нем и сделай это! :-)

Update: это кажется, что Вы должны иметь возможность легко создать несколько поставщиков членства вдоль этих линий здесь:

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 one . – John

+0

@John: обновил свой ответ. Надеюсь, у меня есть решение для вашего вопроса (если вы уже не нашли его сами). –

Смежные вопросы