簡體   English   中英

基於IIS服務器Windows域的ASP.NET MVC 5身份驗證

[英]ASP.NET MVC 5 Authentication based on IIS server's Windows domain

我需要創建一個可以通過Internet訪問的ASP.NET MVC 5 Web應用程序項目。 它將在屬於Windows域的IIS服務器上運行,並且已經通過普通的HTTP身份驗證對某些URL(接受域用戶帳戶)對用戶進行了身份驗證。

對於我的項目,我希望有一個登錄頁面,該頁面要求輸入用戶名和密碼並針對同一Windows域進行身份驗證。 該用戶將無法使用其本地Windows域用戶登錄。 我已經找到了類似問題的參考,但是使用了Forms身份驗證或ASP.NET 2.0,我想這不是我應該使用較新的基礎結構來實現的方式。

我使用的是Visual Studio 2013 Web Express,當我使用.NET Framework 4.5模板創建新項目時,它允許我在“無身份驗證”,“個人用戶帳戶”,“組織帳戶”或“ Windows身份驗證”之間進行選擇。

在詢問這里之前,我已經進行了很多研究,但是我沒有發現任何關於最后三個選項中的哪一個可以讓我以所需方式配置應用程序的任何線索,盡管我認為Windows身份驗證僅限於Intranet應用程序。
在我的研究中,我意識到了System.DirectoryServices.dll,但是我不確定這是否是實現身份驗證邏輯的方式。

任何提示/鏈接將不勝感激,但示例代碼總是更好。

謝謝!

這是一種使用PrincipalContext (System.DirectoryServices.AccountManagement)來驗證域憑據的方法。

public static bool ValidateDomainCredentials(string username, string password)
{

    if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password))
    {
        return false;
    }

    using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, "mydomain"))
    {
           return pc.ValidateCredentials(username, password);
    }
}

登錄前請先調用此命令,以確保用戶位於活動目錄中。

public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
    ...
    var user = await UserManager.FindByNameAsync(model.Username);
    if (user != null && ValidateDomainCredentials(user.user_Name, model.Password))
    {
        await SignInAsync(user, model.RememberMe);
        return RedirectToLocal(returnUrl);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM