Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 设置SSL vs使用DLL进行身份验证登录_C#_Asp.net_Session_Ssl_Active Directory - Fatal编程技术网

C# 设置SSL vs使用DLL进行身份验证登录

C# 设置SSL vs使用DLL进行身份验证登录,c#,asp.net,session,ssl,active-directory,C#,Asp.net,Session,Ssl,Active Directory,目前,我们有以下情况: 首先,有一个web应用程序,当用户需要登录web应用程序时,用户将提供其帐户用户名和密码 用户名和密码将使用以下代码通过AD进行身份验证: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.DirectoryServic

目前,我们有以下情况:

首先,有一个web应用程序,当用户需要登录web应用程序时,用户将提供其帐户用户名和密码

用户名和密码将使用以下代码通过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是正确的吗?

为了证明Wireshark是您唯一需要的工具

只需配置一个过滤器,以捕获通过端口443发送到web服务器的数据包,然后向下搜索它们


先发布没有HTTPS的表单(端口80),然后比较两者。

最安全的方法是使用集成的Windows身份验证,这样用户甚至不必输入密码


在上面没有SSL的代码中,密码将以明文形式从客户端的浏览器发送到Web服务器。可以将明文用户名和密码发送到Active Directory。如果上面的配置加密了从Web服务器到LDAP服务器的连接(或者只使用Wireshark之类的数据包嗅探器),则必须检查.NET文档对于pc.ValidateCredentials.

SSL提供了传输安全性,这与AD查询完全无关。但用户名和密码在局域网内以明文形式传输,可以使用网络嗅探器轻松实现。那么,这是否意味着我的两位同事都错了?(或者可能部分正确?)可能是您的同事A担心您可能正在通过网络发送未加密的用户凭据。这就是为什么有人建议使用SSL。我还建议您使用SSL。为什么您浪费时间,不配置IIS来执行Windows身份验证(SPNEGO)?在您的情况下,您没有SSL,所以只需在端口80上发布表单,并在wireshark中检查结果。