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

advapi32.dll を使用して、Windows API によって提供されるさらに単純な方法があります。

例:

[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 に答える