как сбросить и изменить хэш-пароль в провайдере членства asp.net в MVC - PullRequest
2 голосов
/ 26 июля 2011

Я пришел по коду:

MembershipUser u = Membership.GetUser();
u.ChangePassword(u.ResetPassword(), "Password"); //where will I get the "Password" from 

Я не понимаю, как я получу пароль клиента, так как пользователь забыл свой старый пароль.Я хочу добавить функцию сброса, которая будет генерировать случайный пароль и отправлять электронное письмо конкретному клиенту с идентификатором пользователя и случайным образом сгенерированным паролем.После того, как он / она сможет изменить пароль.

Ответы [ 2 ]

3 голосов
/ 26 июля 2011

Вы можете сгенерировать случайный пароль, подобный этому, используя Членство GeneratePassword метод

string password = System.Web.Security.Membership.GeneratePassword(14, 0);

Если вам нужно создать свою собственную соль и хешировать новый пароль, вот реализация, которая во многом аналогична коду членства:

public class Cryptographer : ICryptographer
{
    #region ICryptographer Members

    public string CreateSalt()
    {
        byte[] data = new byte[0x10];
        new RNGCryptoServiceProvider().GetBytes(data);
        return Convert.ToBase64String(data);
    }

    /// <summary>
    /// Hash the password against the salt
    /// </summary>
    /// <param name="pass">Plain password</param>
    /// <param name="salt">Salt string</param>
    /// <returns>Encrypted password</returns>
    public string HashPassword(string password, string salt)
    {
        byte[] bytes = Encoding.Unicode.GetBytes(password);
        byte[] src = Convert.FromBase64String(salt);
        byte[] dst = new byte[src.Length + bytes.Length];
        byte[] inArray = null;
        Buffer.BlockCopy(src, 0, dst, 0, src.Length);
        Buffer.BlockCopy(bytes, 0, dst, src.Length, bytes.Length);
        HashAlgorithm algorithm = HashAlgorithm.Create(System.Web.Security.Membership.HashAlgorithmType);
        inArray = algorithm.ComputeHash(dst);
        return Convert.ToBase64String(inArray);
    }

    #endregion
}
1 голос
/ 26 июля 2011

Вторым параметром метода ChangePassword является строка, которая содержит новый пароль, который вы хотели бы использовать для этого пользователя.

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

UPDATE

Чтобы ответить на ваш новый вопрос, я считаю, что все хеширование пароля и т. Д. Обрабатывается поставщиком членства.

Если вы просто хотите сбросить пароль пользователя на случайное новое значение, вам лучше использовать метод ResetPassword вместо ChangePassword.

Это будет:

Сбрасывает пароль пользователя на новый, автоматически сгенерированный пароль.

...