Изменить пароль при следующем входе в систему для входа в систему через провайдера AdMembership - PullRequest
3 голосов
/ 07 апреля 2011

Я делаю asp.net, использую FormsAuthentication с провайдером AdMembership.

Мне нужно вручную написать экран «Изменить пароль при следующем входе в систему», потому что он не поддерживается в провайдере.1003 *

Я звоню:

if (Membership.Provider.ChangePassword(cpCv.LoginName, cpCv.OldPassword, cpCv.NewPassword))

, чтобы подтвердить пользователя и сменить пароль (но не снять флажок «при следующем входе в систему»)

Но это всегда не получается, (яПредположим, потому что проверка членства завершается неудачно, когда установлен флаг «Изменить пароль при следующем входе в систему».)

Какой самый простой способ проверки пользователя, поэтому я могу быть уверен, что «старый пароль» и «имя пользователя» совпадаютперед сбросом пароля и снятием флажка «при следующем входе в систему»?

У меня есть работоспособность пароля сброса и флажка сброса, проверка застряла у меня.

Также попробовал этот код, Если флаг Reset имеет значение false, он входит в систему, если true, он не может войти.

    DirectoryEntry de = new DirectoryEntry( path, "jcsn\\"+AdUserName, AdPassword );

    try
    {
        //Bind to the native AdsObject to force authentication.
        object obj = de.NativeObject;

        DirectorySearcher search = new DirectorySearcher( de );

        search.Filter = "(SAMAccountName=" + AdUserName + ")";
        search.PropertiesToLoad.Add( "cn" );
        SearchResult result = search.FindOne();

        if ( null == result )
        {
            return false;
        }

    }
    catch ( Exception ex )
    {
        throw new Exception( "Error authenticating user. " + ex.Message );
    }

Спасибо,

Eric-

Ответы [ 2 ]

0 голосов
/ 25 марта 2013

Хотя это старая тема, кажется, без ответа.

В связанном сообщении на форуме разработчик связывался с Microsoft по этой же проблеме с Membership.ValidateUser () , возвращая false , когда параметр учетной записи для «Пользователь должен изменить пароль при следующем входе в систему» ​​ был проверен администратором системы:

ActiveDirectoryMembershipProvider не позволяет пользователям, имеющим «Пользователь должен сменить пароль при следующем входе в систему ....», установленный для входа в систему. По словам М.С. это по замыслу: потому что ActiveDirectoryMembershipProvider не предоставляет механизм для принудительного пользователь, чтобы дать новый пароль при входе в систему, аутентификация заблокирована.

Они давали подсказку, где они использовали API безопасности с FormsAuthentication, но не предоставили пример.

У кого-нибудь есть идеи?

0 голосов
/ 07 апреля 2011

Существует функция с именем Membership.Validate.Я думаю, что ваш код будет выглядеть так:

if(Membership.ValidateUser(txtUserName.Text, txtPassword.Text)) 
{   
    //Proceed with the change 
}

Я не уверен, почему ваш вызов ChangePassword терпит неудачу - я думаю, ChangePassword может вызвать ValidateUser в любом случае.

...