0
我正在構建一個MVC5站點,用於僅限Intranet的設置。由於員工在工作時共享電腦,因此我需要將登錄/註銷功能納入網站。該應用程序將針對Active Directory進行身份驗證。告訴MVC5用戶已通過Active Directory登錄/註銷
我有認證在這裏工作。但是,當頁面將用戶帶回到returnUrl時,User.Identity.IsAuthenticated
和Request.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);
}
您可以使用HttpUnauthorizedResult在MVC中返回401。 –
您可以使用Response.AppendHeader添加響應頭 –