2014-06-23 7 views
2

En travaillant sur un projet MVC, l'utilisateur insère ses informations d'identification dans un formulaire de connexion. Je reçois tous les autres informations sur cet utilisateur par un webservice et je stocke actuellement comme ceci:Stockage des données utilisateur enregistrées

var result = client.getUser(gui); 
name = result.users.ElementAt(1).name; 
... 

... 

Session["userCode"] = userCode; 
Session["password"] = password; 
Session["userName"] = name; 
Session["userEmail"] = email; 
Session["creationDate"] = creationDate; 
Session["phoneNumber"] = phone; 

Tout au long de l'application, chaque fois que j'ai besoin, j'accéder à ces variables si j'ai besoin les données qu'ils contiennent. Puisque je travaille sur un nouveau projet qui ne contient que 5 pages, je me demande si je vais y accéder même si le projet a des dizaines de pages ou si je ne devrais pas utiliser de variables de session.

Existe-t-il un meilleur moyen de stocker ces données utilisateur enregistrées?

Répondre

4

Commençons par le début: Ne stockez jamais le mot de passe de l'utilisateur dans une session - un problème de sécurité horrible!

Si vous développez votre application tout à l'heure, je recommande fortement d'utiliser Identity framework. Là, vous pouvez ajouter des revendications à l'identité de l'utilisateur. La liste des revendications est comme un dictionnaire de chaîne à chaîne. Et vous pouvez rechercher des réclamations quand vous le souhaitez.

Vous pouvez ajouter réclamation à l'utilisateur avec leur numéro de téléphone, e-mail et date de création facilement, alors les méthodes d'extension pour obtenir ces données sur:

public static bool GetEmail(this ClaimsPrincipal principal) 
{ 
    if (principal == null) 
    { 
     return false; 
    } 

    var emailClaim = principal.Claims.SingleOrDefault(c => c.Type == "Email"); 

    if (emailClaim == null) 
    { 
     return String.Empty; 
    } 
    return emailClaim .Value; 
} 

puis appeler cette méthode comme ceci:

ClaimsPrincipal.Current.GetEmail() 

Les revendications suivent l'utilisateur dans le cookie qui est chiffré.

UPD: vous ne devriez pas stocker de mot de passe en session car vous ne devriez pas en avoir besoin après l'authentification. Une fois l'utilisateur validé et le cookie d'authentification défini, vous devez supprimer le mot de passe de la mémoire. Si vous le gardez en session après l'authentification, il existe une situation où les données de session sont exposées l'un des scénarios auxquels je peux penser est l'exception stacktrace est déversée dans ELMAH, et ELMAH expose les variables de session en texte brut. Une autre situation est lorsque Glimpse est utilisé - il montre des données de session. En ce qui concerne l'aspect social de l'identité - vous pouvez ignorer tout cela en toute sécurité et créer votre application uniquement avec la liste interne des utilisateurs. Je viens de migrer l'un de mes projets de MembershipProvider vers Identity et je n'ai pris aucune dépendance sur l'authentification sociale. En ce qui concerne VS2010 (pourquoi ne pas mettre à niveau?), Identity ne dépend que d'Entity Framework 6.1, mais ne dépend pas de MVC ou d'autre chose, donc cela ne devrait poser aucun problème, sauf si vous utilisez Database First EF, dans ce cas, l'outillage EF6.1 pourrait ne pas fonctionner avec VS2010. Cependant, je n'ai pas essayé cela dans VS2010 et je vous suggère de créer un minuscule projet de test dans VS2010 qui simule l'intégration d'Identité avec votre site.

+1

Vous dites "Ne jamais stocker le mot de passe de l'utilisateur dans une session - un problème de sécurité horrible!". Pouvez-vous expliquer mieux? En outre, il est indiqué sur le lien que vous avez fourni: "L'hypothèse selon laquelle les utilisateurs se connecteront en entrant un nom d'utilisateur et un mot de passe enregistrés dans votre propre application n'est plus valide." 'Et' "Un système d'appartenance moderne doit permettre des connexions basées sur la redirection vers des fournisseurs d'authentification tels que Facebook, Twitter et autres. "'. Je crée une application d'entreprise: la partie sociale est inutile pour moi. Devrais-je toujours être à la recherche de 'asp.net Identity'? En outre, j'utilise Visual Studio 2010 – chiapa

+1

@chiapa juste ajouté des réponses à votre question comme modifier à ma réponse. – trailmax

Questions connexes