Migrating an Existing Website from SQL Membership to ASP.NET Identity

來源:互聯網
上載者:User

標籤:

Migrating an Existing Website from SQL Membership to ASP.NET Identity

public class User : IdentityUser        {        public User()        {            CreateDate = DateTime.Now;            IsApproved = false;            LastLoginDate = DateTime.Now;            LastActivityDate = DateTime.Now;            LastPasswordChangedDate = DateTime.Now;            LastLockoutDate = DateTime.Parse("1/1/1754");            FailedPasswordAnswerAttemptWindowStart = DateTime.Parse("1/1/1754");            FailedPasswordAttemptWindowStart = DateTime.Parse("1/1/1754");        }        public System.Guid ApplicationId { get; set; }        public string MobileAlias { get; set; }        public bool IsAnonymous { get; set; }        public System.DateTime LastActivityDate { get; set; }        public string MobilePIN { get; set; }        public string LoweredEmail { get; set; }        public string LoweredUserName { get; set; }        public string PasswordQuestion { get; set; }        public string PasswordAnswer { get; set; }        public bool IsApproved { get; set; }        public bool IsLockedOut { get; set; }        public System.DateTime CreateDate { get; set; }        public System.DateTime LastLoginDate { get; set; }        public System.DateTime LastPasswordChangedDate { get; set; }        public System.DateTime LastLockoutDate { get; set; }        public int FailedPasswordAttemptCount { get; set; }        public System.DateTime FailedPasswordAttemptWindowStart { get; set; }        public int FailedPasswordAnswerAttemptCount { get; set; }        public System.DateTime FailedPasswordAnswerAttemptWindowStart { get; set; }        public string Comment { get; set; }    }
      public class SQLPasswordHasher : PasswordHasher      {        public override string HashPassword(string password)        {            return base.HashPassword(password);        }public override PasswordVerificationResult VerifyHashedPassword(string  hashedPassword, string providedPassword)        {            string[] passwordProperties = hashedPassword.Split(‘|‘);            if (passwordProperties.Length != 3)            {                return base.VerifyHashedPassword(hashedPassword, providedPassword);            }            else            {                string passwordHash = passwordProperties[0];                int passwordformat = 1;                string salt = passwordProperties[2];                if (String.Equals(EncryptPassword(providedPassword, passwordformat, salt), passwordHash, StringComparison.CurrentCultureIgnoreCase))                {                    return PasswordVerificationResult.SuccessRehashNeeded;                }                else                {                    return PasswordVerificationResult.Failed;                }            }        }//This is copied from the existing SQL providers and is provided only for back-compat.        private string EncryptPassword(string pass, int passwordFormat, string salt)        {            if (passwordFormat == 0) // MembershipPasswordFormat.Clear                return pass;            byte[] bIn = Encoding.Unicode.GetBytes(pass);            byte[] bSalt = Convert.FromBase64String(salt);            byte[] bRet = null;            if (passwordFormat == 1)            { // MembershipPasswordFormat.Hashed                 HashAlgorithm hm = HashAlgorithm.Create("SHA1");                if (hm is KeyedHashAlgorithm)                {                    KeyedHashAlgorithm kha = (KeyedHashAlgorithm)hm;                    if (kha.Key.Length == bSalt.Length)                    {                        kha.Key = bSalt;                    }                    else if (kha.Key.Length < bSalt.Length)                    {                        byte[] bKey = new byte[kha.Key.Length];                        Buffer.BlockCopy(bSalt, 0, bKey, 0, bKey.Length);                        kha.Key = bKey;                    }                    else                    {                        byte[] bKey = new byte[kha.Key.Length];                        for (int iter = 0; iter < bKey.Length; )                        {                            int len = Math.Min(bSalt.Length, bKey.Length - iter);                            Buffer.BlockCopy(bSalt, 0, bKey, iter, len);                            iter += len;                        }                        kha.Key = bKey;                    }                    bRet = kha.ComputeHash(bIn);                }                else                {                    byte[] bAll = new byte[bSalt.Length + bIn.Length];                    Buffer.BlockCopy(bSalt, 0, bAll, 0, bSalt.Length);                    Buffer.BlockCopy(bIn, 0, bAll, bSalt.Length, bIn.Length);                    bRet = hm.ComputeHash(bAll);                }            }            return Convert.ToBase64String(bRet);        }
public UserManager()            : base(new UserStore<User>(new ApplicationDbContext()))        {            this.PasswordHasher = new SQLPasswordHasher(); }
private Guid GetApplicationID()        {            using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString))            {                string queryString = "SELECT ApplicationId from aspnet_Applications WHERE ApplicationName = ‘/‘"; //Set application name as in database                SqlCommand command = new SqlCommand(queryString, connection);                command.Connection.Open();                var reader = command.ExecuteReader();                while (reader.Read())                {                    return reader.GetGuid(0);                }                return Guid.NewGuid();            }        }
var currentApplicationId = GetApplicationID();User user = new User() { UserName = Username.Text,ApplicationId=currentApplicationId, …};

 

Migrating an Existing Website from SQL Membership to ASP.NET Identity

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.