如何在Cookie身份验证的同时使用asp.net核心Windows身份验证?

时间:2017-07-25 18:01:38

标签: asp.net-core active-directory asp.net-core-mvc windows-authentication asp.net-core-middleware

我有一个ASP.net Core(.net framework 4.7)应用程序正在使用cookie身份验证,就像this link

中的那样
    app.UseCookieAuthentication(new CookieAuthenticationOptions()
    {
        AuthenticationScheme = "CookieAuthentication",
        LoginPath = new PathString("/Login/"),
        AccessDeniedPath = new PathString("/Login/"),
        AutomaticAuthenticate = true,
        AutomaticChallenge = true
    });

我想要做的是允许使用Cookie身份验证进行Windows身份验证。因此,如果用户在公司的域中,则他/她不必输入用户名和密码。但是如果他们来自外部域,则他们将被重定向到登录页面并输入他们的用户名和密码以进行身份​​验证。

1 个答案:

答案 0 :(得分:1)

  

如果用户在公司的域中,则他/她不必输入   用户名和密码。

doesn't have to enter user name and password是棘手的部分。据我所知,您无法同时满足身份验证

但是,您可以要求两种类型的用户输入用户名和密码,并首先通过您的系统进行身份验证。如果身份验证失败,您可以使用域帐户进行身份验证。

如果该方案可行,则可以在ASP.NET Core中使用Novell.Directory.LdapHere是示例代码。

public bool ValidateUser(string domainName, string username, string password)
{
   string userDn = $"{username}@{domainName}";
   try
   {
      using (var connection = new LdapConnection {SecureSocketLayer = false})
      {
         connection.Connect(domainName, LdapConnection.DEFAULT_PORT);
         connection.Bind(userDn, password);

         if (connection.Bound)
            return true;
      }
   }
   catch (LdapException ex)
   {
      // Log exception
   }
   return false;
}

注意:截至今天,System.DirectoryServices尚未在ASP.NET Core中可用。