移动设备上的ASP.NET角色和会员身份验证

在现代移动应用开发中,用户身份验证是一个核心功能。本文将探讨如何在移动设备上实现ASP.NET角色和会员身份验证系统。这涉及到将移动设备与后端数据库同步,以便用户可以使用他们现有的ASP.NET角色和会员身份凭据在移动设备上验证他们的账户。

为了实现这一功能,首先需要确保移动设备能够与后端数据库进行通信,并下载所有相关的用户数据。这通常涉及到将ASP.NETaspnet_XXXX表同步到移动设备上。

接下来,将展示如何在C#中编写代码来检查用户名是否匹配,然后比较用户最初生成的密码哈希与用户提供的密码生成的哈希。

在程序的最后,将持久化用户数据,以便程序的其他部分可以使用这些数据。

代码实现

以下是实现用户登录的C#代码示例:

public bool LogonUser(string userName, string passWord) { Guid userID = Guid.Empty; string originalHash = ""; string saltValue = ""; DataLayer dataLayer = new DataLayer(); // 首先检查用户名 try { string SQL = "Select aspnet_Membership.UserId, Password, PasswordSalt " + "From aspnet_Membership inner join aspnet_Users on aspnet_Membership.UserID = aspnet_Users.UserID " + "Where LoweredUserName = @p1 "; SqlCeCommand sqlCeCommand = new SqlCeCommand(SQL, dataLayer.GetOpenConnection); SqlCeParameter param1 = sqlCeCommand.Parameters.Add("p1", System.Data.SqlDbType.NVarChar); param1.Value = userName.ToLower(); SqlCeDataReader reader = sqlCeCommand.ExecuteReader(); while (reader.Read()) { userID = reader.GetGuid(0); originalHash = reader.GetString(1); saltValue = reader.GetString(2); break; } reader.Close(); } catch (Exception ex) { new Logger().Log(ex); throw ex; } finally { dataLayer.CloseSQLConnection(); } // 用户名存在 if (userID.CompareTo(Guid.Empty) != 0) { // 比较密码哈希 byte[] bIn = Encoding.Unicode.GetBytes(passWord); byte[] bSalt = Convert.FromBase64String(saltValue); byte[] bAll = new byte[bSalt.Length + bIn.Length]; byte[] bRet = null; Buffer.BlockCopy(bSalt, 0, bAll, 0, bSalt.Length); Buffer.BlockCopy(bIn, 0, bAll, bSalt.Length, bIn.Length); HashAlgorithm s = HashAlgorithm.Create("SHA1"); bRet = s.ComputeHash(bAll); string newHash = Convert.ToBase64String(bRet); // 检查数据库中的哈希是否与生成的新哈希匹配 if (originalHash != newHash) { throw new Exception("Incorrect Username/Password combination. Please try again"); } } else { throw new Exception("Incorrect Username/Password combination. Please try again"); } // 将用户的凭据存储在配置对象中,以便应用程序实例使用 Config.UserID = userID; Config.UserName = userName; Config.PassWord = passWord; return true; }

这段代码首先通过执行一个SQL查询来检查用户名是否存在。如果用户名存在,它将获取用户的密码哈希和盐值。然后,它将用户输入的密码与存储的哈希进行比较。如果哈希匹配,它将用户的凭据存储在配置对象中,以便程序的其他部分可以使用这些数据。

这个过程确保了用户可以在移动设备上使用他们现有的ASP.NET角色和会员身份凭据进行身份验证。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485