Ensemble HttpContext.Actuel.De l'utilisateur à partir du Fil.CurrentPrincipal
J'ai un gestionnaire de sécurité dans mon application qui fonctionne pour windows et web, le processus est simple, il suffit à l'utilisateur et pwd et authentifie contre une base de données définit ensuite le Fil.CurrentPrincipal avec une entité personnalisée. Pour les applications windows cela fonctionne bien, mais j'ai des problèmes avec les applications web.
Après le processus d'authentification, quand je suis en train de régler le Courant.L'utilisateur à l'entité personnalisée à partir du Fil.CurrentPrincipal ce dernier contient un GenericPrincipal. Suis-je en train de faire quelque chose de mal? C'est mon code:
De connexion.aspx
protected void btnAuthenticate_Click(object sender, EventArgs e)
{
SecurityManager.Authenticate("user","pwd"); //This is where I set the custom principal in Thread.CurrentPrincipal
FormsAuthenticationTicket authenticationTicket = new FormsAuthenticationTicket(1,
"user",
DateTime.Now,
DateTime.Now.AddMinutes(30),
false,
"");
string ticket = FormsAuthentication.Encrypt(authenticationTicket);
HttpCookie authenticationCookie = new HttpCookie(FormsAuthentication.FormsCookieName, ticket);
Response.Cookies.Add(authenticationCookie);
Response.Redirect(FormsAuthentication.GetRedirectUrl("user", false));
}
Mondiale.asax (C'est là où le problème apparaît)
protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
HttpCookie authCookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName];
if (authCookie == null)
return;
if (HttpContext.Current.User != null && HttpContext.Current.User.Identity.IsAuthenticated && HttpContext.Current.User.Identity is FormsIdentity)
{
HttpContext.Current.User = System.Threading.Thread.CurrentPrincipal; //Here the value is GenericPrincipal
}
Merci d'avance pour toute aide.
Vous devez vous connecter pour publier un commentaire.
Tout d'abord: Vous devez définir le capital sur chaque demande.
Formes d'authentification utilise ses propres affectation du capital sur chaque demande. C'est pourquoi vous voyez l'
GenericPrincipal
J'ai l'habitude de les réaffecter à mon habitude prinicpal dans OnPostAuthenticate lorsque la norme mécanisme d'authentification est fait.
JFYI, vous pouvez remplacer
avec
à réduire la durée du si la clause
L'Intellisense me dit que
HttpContext.Current.user
etSystem.Threading.Thread.CurrentPrincipal
sont tous deux de typeSystem.Security.Principal.IPrincipal
.Si je comprends bien, cela signifie que la déclaration
HttpContext.Current.User = System.Threading.Thread.CurrentPrincipal;
affectez la valeur de thread principal à la httpcontext utilisateur sans aucun moulage ou de la conversion.Je ne vois pas où exactement dans votre code, vous définissez la valeur de la
System.Threading.Thread.CurrentPrincipal
, mais je vous suggère d'examiner attentivement la façon dont vous définissez le principal. Je vous recommande de mettre des points d'arrêt sur ce code et l'exécuter dans le débogueur. Voir ce qui se passe, ligne par ligne.Désolé pour la VB (orrible langue) cependant cela devrait répondre à votre question ...
http://www.asp.net/security/videos/use-custom-principal-objects
Puis modifiez la ligne de code à quelque chose comme ...
Qui devrait vous donner ce dont vous avez besoin.
Fonctionne parfaitement pour moi 🙂
Lorsque vous utilisez l'Authentification Basée sur les Formulaires (FBA), vous obtenez une GenericPrincipal dans ASP.NET. C'est normal, tu ne fais rien de mal.
Où vous attend ? Vous pouvez utiliser l'Authentification Intégrée de Windows dans votre ASP.NET app si vous vous attendiez à un WindowsPrincipal.