0

目录的结构是这样的,

ou=system,ou=valeteck,cn=mayank

我必须检查用户输入的密码是否正确并与用户的密码匹配,即 mayank。

但系统和cn='mayank'密码不同。如果我使用密码创建目录条目对象,cn我没有使用 ldap 进行身份验证,但是如果我使用系统目录及其密码,我将获得身份验证,但是如何检查用户的密码。

4

2 回答 2

0
 private bool LoginS(string userName, string password)
        {
            bool authentic = false;
            try
            {
                DirectoryEntry entry = new DirectoryEntry(LDAP-Path, userName, password, AuthenticationTypes.Secure);
                authentic = true;


                Console.WriteLine("Authentication successful");

            }
            catch (DirectoryServicesCOMException e)
            {
                _logger.Error("Authentification error", e);
                //User doesnt exist or input is false

            }
            return authentic;
        }
于 2012-08-14T12:58:41.920 回答
0

Windows API 使用 advapi32.dll 为您提供了更简单的方法。

例子:

[DllImport("advapi32.dll", EntryPoint = "LogonUserW", SetLastError = true, CharSet = CharSet.Auto)]
    public static extern bool LogOnUser(string lpszUserName, string lpszDomain, string lpszPassword,
        int dwLogOnType, int dwLogOnProvider, ref IntPtr phToken);

如果用户确实在域中并且已正确输入其密码,则此方法仅返回 true 或 false。然后,您只需使用自己的登录方法检查针对 advapi32.dll 的身份验证。

public ActionResult SignIn(SignInModel model)
    {
        string domainName = CheckSignIn.GetDomainName(model.User.UserName);
        string userName = CheckSignIn.GetUserName(model.User.UserName);
        IntPtr token = IntPtr.Zero;
        bool result = CheckSignIn.LogOnUser(userName, domainName, model.User.UniqueUserCode, 2, 0, ref token);
        if (result)
        {
            if (!string.IsNullOrEmpty(Request.QueryString["ReturnUrl"]) && Request.QueryString["ReturnUrl"] != "/")
            {
                FormsAuthentication.RedirectFromLoginPage(model.User.UserName, false);
            }
            else
            {
                FormsAuthentication.SetAuthCookie(model.User.UserName, false);
                return RedirectToAction("MyVoyages", "Voyage");
            }
        }
        return SignIn(true);
    }

简单,但功能强大。

于 2012-08-14T13:04:18.793 回答