我想问一下,我正在做什么被认为是登录环境的一个好习惯,我正在创建一个SaaS,希望您对登录服务器进行身份验证,以便使用我正在创建的软件,但我想检查我所采用的方法是否正确,所以我会发布我在这里做的,以便看到你的想法!提前感谢大家的意见。
private void AcceptButton_Click(object sender, EventArgs e)
{
bool loginSuccesful = false;
if (string.IsNullOrEmpty(usernameTextBox.Text))
{
MessageBox.Show("Por favor introduzca su Usuario.");
usernameTextBox.Focus();
}
else
{
try
{
string connectionString = ConfigurationSettings.AppSettings["IntegraTDB"].ToString().Trim();
SqlConnection con = new SqlConnection(connectionString);
con.Open();
SqlCommand cmd = new SqlCommand("select * from dbo.Users where Username = @Username and Password = @Password", con);
cmd.Parameters.AddWithValue("@Username", usernameTextBox.Text);
cmd.Parameters.AddWithValue("@Password", passwordTextBox.Text);
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
loginSuccesful = true;
}
dr.Close();
con.Close();
}
catch (Exception ex)
{
MessageBox.Show("Error de autenticación: " + ex.Message);
}
if (loginSuccesful == true)
{
role_Extraction();
IIdentity identity;
identity = new GenericIdentity(usernameTextBox.Text);
IPrincipal principal = new GenericPrincipal(identity, _roles);
Thread.CurrentPrincipal = principal;
MessageBox.Show("Bienvenido a IntegraT!");
this.DialogResult = DialogResult.OK;
}
else
{
MessageBox.Show("Usuario y/o Contraseña incorrectos.");
}
}
}
答案 0 :(得分:2)
以上看起来您可能正在将纯文本密码存储在数据库中。这应该始终避免IMO。至少应采用某种形式的散列。
更好的方法是利用身份验证解决方案,例如活动目录。