目前,我们有以下情况:
1、有一个网络应用程序,当用户需要登录网络应用程序时,用户将提供他/她的帐户用户名和密码。
用户名和密码将通过 AD 使用以下代码进行身份验证:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.DirectoryServices;
using System.DirectoryServices.AccountManagement;
namespace Access
{
public partial class Login : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, txtboxDomain.Text))
{
bool isValid = pc.ValidateCredentials(txtboxUsername.Text, txtboxPassword.Text);
if (isValid == true)
{
lblLogin.Text = "VALID";
Session["Person"] = txtboxUsername.Text;
Session.Timeout = 1;
}
else
{
lblLogin.Text = "INVALID";
}
}
}
}
}
但是,一位同事'A'提到上述方式根本不安全。
她提供的理由如下:
- IIS 上没有 SSL 设置。
- 即使 IIS 没有 SSL 设置,至少使用 IT 部门的安全 DLL 文件来提供身份验证方法。
但是,另一位同事“B”对她的回答表示怀疑,他认为,由于代码将针对 Active Directory (AD) 进行身份验证,因此它肯定是安全的,因此无需在 Web 应用程序所在的 IIS 上设置 SSL托管。
此外,他告诉她,IT 部门的安全 DLL 文件可能不会提供额外的安全性,因为首先,它是封闭的,其次,他认为它只会减少对身份验证方法的编码需求。
那么,我可以知道我的同事 A 或我的同事 B 的正确程度吗?