检测使用ASP.NET应用程序登录计算机的用户

时间:2009-03-27 08:34:33

标签: c# asp.net active-directory windows-authentication

我想开发一个可以检测登录Window Domain的用户的ASP.NET应用程序。这些凭据将用于登录ASP.NET应用程序。

我该怎么做?

谢谢!

5 个答案:

答案 0 :(得分:7)

在IIS中,启用“集成Windows身份验证”,如果使用以下命令,则在代码中启用:

Request.ServerVariables["LOGON_USER"]

它将返回登录用户的Windows用户名,即MYDOMAIN \ MYUSERNAME

答案 1 :(得分:1)

以下是我用来对Active Directory进行身份验证的C#代码

using System;
using System.DirectoryServices;

namespace XYZcompany.Enterprise
{
  public class AuthenicationMgr
  {
    private static readonly int AD_ERR_LOGON_FAIL = -2147023570;
    private static readonly string _path = "LDAP://xxx.yyy.ggg";
    private static readonly string _domain = "xxx.yyy.ggg";

    public static bool IsAuthenticated(string username, string pwd)
    {
      bool authenticatedFlag = true;
      string domainAndUsername = _domain + "\\" + username;
      DirectoryEntry entry = new DirectoryEntry(_path, domainAndUsername, pwd);
      try
      {
        // Bind to the native AdsObject to force authentication.
        Object obj = entry.NativeObject;
        DirectorySearcher search = new DirectorySearcher(entry);

        search.Filter = "(SAMAccountName=" + username + ")";
        search.PropertiesToLoad.Add("cn");
        SearchResult result = search.FindOne();

        if (result == null)
        {
          authenticatedFlag = false;
        }
        else
        {
          authenticatedFlag = true;
        }
      }
      catch (System.Runtime.InteropServices.COMException ex)
      {
        if (ex.ErrorCode == AD_ERR_LOGON_FAIL)
        {
          authenticatedFlag = false;
        }
        else
        {
          throw new ApplicationException("Unable to authenticate user due to system error.", ex);
        }
      }
      return authenticatedFlag;
    }
  }
}

答案 2 :(得分:1)

对于ASP.net,您可以使用

HttpContext.Current.User.Identity

如果IIS配置正确(至少没有匿名登录)

答案 3 :(得分:0)

System.Security.Principal.WindowsIdentity.GetCurrent().User.ToString

答案 4 :(得分:0)

您应该查看活动目录成员资格提供程序。它内置于ASP.NET中。