我正在使用ASP.NET MVC 5和Forms身份验证以及AD成员资格提供程序,如下所示:
<authentication mode="Forms">
<forms name=".ADAuthCookie" loginUrl="~/Account/Login" defaultUrl="~/" timeout="20" slidingExpiration="true" protection="All" />
</authentication>
<membership defaultProvider="ADMembershipProvider">
<providers>
<clear/>
<add name="ADMembershipProvider"
type="System.Web.Security.ActiveDirectoryMembershipProvider"
connectionStringName="ADConnectionString"
attributeMapUsername="sAMAccountName"
enableSearchMethods="true" />
</providers>
</membership>
我有匿名身份验证已启用,Windows身份验证已禁用。
我可以成功对AD进行身份验证,User.Identity.Name
的值确实显示了我的用户名。但是IsAuthenticated
是错误的。为什么呢?
我想在布局中使用一些标记来显示/隐藏导航。现在,我在我的观点中诉诸于此:
@if (@User.Identity.Name == "") { show insecure content }
我使用我Login
中定义的AccountController
方法,如下所示:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(Login model, string returnUrl = "")
{
if (ModelState.IsValid)
{
if (Membership.ValidateUser(model.UserName, model.Password))
{
_logger.Info("AccountController.Login() User.Identity.Name=" + User.Identity.Name);
FormsAuthentication.RedirectFromLoginPage(model.UserName, model.RememberMe);
}
ModelState.AddModelError("", "Incorrect username and/or password");
}
return View(model);
}
我也不完全相信以下方法在我的/ Logout中按预期工作:
HttpContext.GetOwinContext().Authentication.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
FormsAuthentication.SignOut();
Session.Abandon();
使用User.Identity
时,我可能并不完全理解ActiveDirectoryMembershipProvider
的预期行为。
答案 0 :(得分:0)
如果您使用的是脚手架MVC5应用程序,则有一个SignInAsync
部分,您必须在其中设置声明身份以进行身份验证。我不得不对我做一些改动,但它看起来像这样:
private async Task SignInAsync(ApplicationUser user, bool isPersistent)
{
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
var identity = new ClaimsIdentity(new[] { new Claim(ClaimTypes.Name, user.UserName), }, DefaultAuthenticationTypes.ApplicationCookie, ClaimTypes.Name, ClaimTypes.Role);
AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity);
}
我遇到了同样的问题,并跟随这篇文章和其他一些人来解决它:http://kevin-junghans.blogspot.com/2013/12/using-claims-in-aspnet-identity.html
我在之前的一篇文章中被告知,MVC5取消了表格认可,支持索赔,我可能错了,或许有人可以对此有所了解。