Attualmente sto cercando di implementare una protezione personalizzata in un'applicazione Web ASP.NET MVC2.Personalizzato IIdentity e IPrincipal utilizzando FormsAuthenticationTicket cookie in MVC2
che sto cercando di fare qualcosa di veramente semplice come il mio codice qui sotto mostra, ma per qualche motivo se uso l'attributo [Authorize(Roles="Admins")]
su una delle mie azioni di controllo, controlla le Context.User.IsInRole("Admins")
o Page.User.IsInRole("Admins")
si è sempre false.
È anche strano che lo User.Identity.Name
sia vuoto.
Vedere la mia codice qui sotto, sto usando un FormsAuthenticationTicket all'interno di un biscotto che ho poi usato nel manico Application_AuthenticateRequest
evento nel mio Gloabl.asax per impostare il Context.User con un oggetto GenericPrincipal
.
Il mio codice di accesso:
[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();
}
mio Global.asax Codice:
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;
}
Una volta che ho impostato il context.User sopra posso visualizzare nella finestra di controllo e l'oggetto è perfettamente, nei ruoli corretti con il nome corretto ecc, tuttavia se provo a bloccare le azioni del controller o ad utilizzare il Preside da qualsiasi parte del mio sito, è sempre impostato su una stringa vuota senza ruoli assegnati !!
Sto immaginando che sto facendo qualcosa di veramente stupido qui, ma se qualcuno lo sapesse, lo apprezzerei davvero.
can u si prega di inviare il vostro web.config MODULI impostazioni, per favore? –
Ho lo stesso problema – Mohsen