В настоящее время я пытаюсь реализовать некоторую пользовательскую защиту в веб-приложении ASP.NET MVC2.
Я пытаюсь сделать что-то действительно простое, как показывает мой код ниже, но по какой-то причине, если я использую атрибут [Authorize(Roles="Admins")]
в одном из моих действий контроллера, отметьте Context.User.IsInRole("Admins")
или Page.User.IsInRole("Admins")
, это всегда false.
Также странно, что User.Identity.Name
также пуст.
См. Мой код ниже, я использую FormsAuthenticationTicket в cookie, который я затем использую в дескрипторе события Application_AuthenticateRequest
в моем Gloabl.asax, чтобы установить Context.User с объектом GenericPrincipal
.
Мой логин:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Login(string username, string password)
{
//this would obviously do a check against the supplied username and password
if (true)
{
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, username, DateTime.Now,
DateTime.Now.AddMinutes(15), false, "Admins|Users|Members");
string encTicket = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
this.Response.Cookies.Add(cookie);
string url = FormsAuthentication.GetRedirectUrl(username, false);
Response.Redirect(url);
}
return View();
}
Мой код Global.asax:
void MvcApplication_AuthenticateRequest(object sender, EventArgs e)
{
HttpApplication application = (HttpApplication)sender;
HttpContext context = application.Context;
var cookie = context.Request.Cookies[FormsAuthentication.FormsCookieName];
if (cookie != null)
{
// Get the authentication ticket
// and rebuild the principal & identity
FormsAuthenticationTicket authTicket =
FormsAuthentication.Decrypt(cookie.Value);
string[] roles = authTicket.UserData.Split(new Char[] { '|' });
GenericIdentity userIdentity = new GenericIdentity(authTicket.Name);
GenericPrincipal userPrincipal =
new GenericPrincipal(userIdentity, roles);
context.User = userPrincipal;
}
Как только я установил context.User выше, я могу видеть в окне просмотра, и объект установлен отлично, в правильных ролях с правильным именем и т. Д., Однако, если я пытаюсь заблокировать действия контроллера или использую Принципала из любого места на моем сайте всегда задана пустая строка без назначенных ролей !!
Я предполагаю, что я делаю что-то действительно глупое, но если бы кто-то мог указать на это, я был бы очень признателен.