1

我有一個ASP.net核心(的.NET Framework 4.7)的應用程序正在使用像什麼是this link如何在Cookie認證的同時使用asp.net核心Windows認證?

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

cookie認證我想要做的是允許與Cookie的使用Windows身份驗證。因此,如果用戶在公司的域中,則他/她不必輸入用戶名和密碼。但是如果他們來自外部域,則他們被重定向到登錄頁面並輸入他們的用戶名和密碼以被認證。

+0

您目前如何驗證外部域用戶? – Win

+0

我通過cookie認證來做到這一點。 – Baso

回答

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核心產品尚未推出。

+0

我想我可以把app.UseCookieAuthentication放在app.UseMvc之後,並且啓用windows auth和匿名auth,如果windows auth沒有工作,管道將繼續到達CookieAuthentication。在這段時間內允許我的登錄控制器被訪問[AllowAnonymous]並且控制器的其餘部分具有[Authorize]屬性。它有可能以任何方式? 謝謝, – Baso

+0

你可能可以把這兩個中間件放在一起。我從來沒有嘗試過,所以我不能肯定地說。 – Win