2013-11-14 99 views
0

我正在構建一個MVC5站點,用於僅限Intranet的設置。由於員工在工作時共享電腦,因此我需要將登錄/註銷功能納入網站。該應用程序將針對Active Directory進行身份驗證。告訴MVC5用戶已通過Active Directory登錄/註銷

我有認證在這裏工作。但是,當頁面將用戶帶回到returnUrl時,User.Identity.IsAuthenticatedRequest.IsAuthenticated都是錯誤的。這導致主頁仍然提供「登錄」選項,即使他們以前已經成功地通過了該動作。

如何告訴MVC用戶已成功登錄?

從Web.config文件:

<authentication mode="Windows" /> 

從賬戶控制器:

[HttpPost] 
[AllowAnonymous] 
[ValidateAntiForgeryToken] 
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) 
{ 
    if (ModelState.IsValid) 
    { 
     using (var pc = new PrincipalContext(ContextType.Domain)) 
     { 
      if (pc.ValidateCredentials(model.UserName, model.Password, ContextOptions.Negotiate | ContextOptions.SimpleBind)) 
      { 
       FormsAuthentication.SetAuthCookie(model.UserName, false); 
       return RedirectToLocal(returnUrl); 
      } 
      else 
      { 
       ModelState.AddModelError("", "Invalid username or password."); 
      } 
     } 
    } 

更新 默認的MVC代碼創建一個標準的互聯網登錄該方法。我試圖找出如何生成一個ClaimsIdentity對象,所以我也可以利用它。

private async Task SignInAsync(ApplicationUser user, bool isPersistent) 
{ 
    AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie); 
    var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie); 
    AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity); 
} 

回答

0

我不確定您是否正在使用ntlm身份驗證的正確方法。 基本上,您可以添加「登錄爲不同的用戶」按鈕到您的網站和事件處理程序,它將返回到用戶401的響應,這反過來會觸發客戶端上的窗口登錄彈出輸入憑據。 請看看this的帖子。

+0

您可以使用HttpUnauthorizedResult在MVC中返回401。 –

+0

您可以使用Response.AppendHeader添加響應頭 –