web-dev-qa-db-fra.com

ASP.NET_SessionId vs .ASPXAUTH pourquoi avons-nous besoin des deux?

Ne pouvons-nous pas simplement stocker dans la session si l'utilisateur est connecté ou non et se débarrasser du fichier .ASPXAUTH?

14
Daniel Gartmann

ASP.Net_SessionIdest un cookie utilisé pour identifier les utilisateurs session sur le serveur. La session est une zone sur le serveur qui peut être utilisée pour stocker des données entre des requêtes http.

Par exemple, l'action du contrôleur peut effectuer:

Session["FirstName"] = model.FirstName;

Ensuite, lors d’une action ultérieure, le premier nom peut être extrait de la session:

var firstName = Session["FirstName"];

ASP.Net_SessionId identifie la session pour la demande de cet utilisateur. Un utilisateur différent soumettra un cookie différent et Session["FirstName"] conservera une valeur différente pour cet utilisateur différent.

ASPXAUTHest un cookie permettant d'identifier si l'utilisateur est authentifié (c'est-à-dire que son identité a été vérifiée). Par exemple, une action du contrôleur peut déterminer si l'utilisateur a fourni les informations de connexion correctes et, le cas échéant, émettre un cookie d'authentification using :

FormsAuthentication.SetAuthCookie(username, false);

Ensuite, vous pourrez vérifier ultérieurement si l'utilisateur est autorisé à effectuer une action en utilisant l'attribut [Autoriser] qui vérifie la présence du cookie ASPXAUTH.

Donc, en résumé, les cookies sont là pour 2 buts différents. Une pour déterminer l'état de la session des utilisateurs et une pour déterminer si l'utilisateur est authentifié.

Pour compléter la réponse à votre question, oui, vous pouvez vous débarrasser du cookie ASPXAUTH et utiliser simplement session pour identifier l'utilisateur (je l'ai déjà vu dans des applications asp classiques), mais je ne le recommanderais pas. Il vaut bien mieux séparer les problèmes de manière plus nette et utiliser la méthode appropriée si nécessaire. La session et l'authentification auront leurs propres valeurs de délai d'attente. En utilisant la session pour l'authentification, vous ne disposez que du délai d'expiration unique. Je ne sais pas s'il y a des implications en termes de sécurité à utiliser uniquement une session pour l'authentification, mais je les garderais néanmoins séparément.

22
Dangerous

.NET émet un cookie totalement différent, nommé ASP.NET_SessionId, pour suivre l'état de la session.

Le cookie ASPXAUTH est utilisé pour déterminer si un utilisateur est authentifié.

Il s’agit donc de 2 concepts différents, à savoir la gestion de l'état de session et la gestion de l'authentification à l'aide de l'authentification par formulaire.

Si vous utilisez Session pour authentifier et oubliez l’authentification de formulaire, vous vous débarrasserez de .ASPXAUTH.

4
Nipun Ambastha

Les deux sont obligatoires, ce qui entraîne l'une des vulnérabilités suivantes:

* ASP.NET_SessionId Alone: ​​Fixation de session

* Cookie d’authentification par formulaire seul: impossible de mettre fin au jeton d’authentification sur le serveur

En outre, vous devez vous assurer qu'ils sont correctement couplés. Sinon, la configuration pose également un risque: 

* Cookies d'authentification des formulaires ASP.NET_SessionID et des formulaires faiblement couplés: toujours vulnérables

ref: http://blog.securityps.com/2013/06/session-fixation-forms-authentication.html

1
user2480156