IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET MVC Discussion :

[MVC4]sécurité "simple membership"


Sujet :

ASP.NET MVC

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Points : 491
    Points
    491
    Par défaut [MVC4]sécurité "simple membership"
    Bonjour,

    Comme je le découvrais dans un post précédent, la sécurité a changé avec MVC4.

    Le nom d'un nouvel utilisateur qui s'est enregistré est maintenant ajouté à une table "UserProfile" alors que son mot de passe est enregistré dans "webpages_Membership".

    Ma question est de savoir si on peut facilement (avec l'API WebSecurity) supprimer le mot de passe d'un utilisateur tout en conservant son nom dans UserProfile. Et ensuite créer un mot de passe pour un utilisateur déjà existant.

    Si oui, comment ?

    Question subsidiaire, n'y aurait il pas un tutoriel ou des exemples sur cette sécurité "Simple membership" ?

  2. #2
    Membre du Club Avatar de k4st0r42
    Homme Profil pro
    Artisan numérique
    Inscrit en
    Janvier 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisan numérique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 48
    Points : 68
    Points
    68
    Par défaut
    C'est la méthode WebSecurity.ChangePassword(...) que tu cherches ?
    Le fossé séparant théorie et pratique est moins large en théorie qu’il ne l’est en pratique.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Points : 491
    Points
    491
    Par défaut
    Merci pour ton intérêt pour cette question.

    En fait ce n'est pas le changement de password que je cherche.

    Dans mon application, je garde un historique de qui a ajouté ou modifié un enregistrement dans une table (AchatTBL par exemple).

    Il y a donc une ForeignKey entre ma table AchatTBL et UserProfile. Dès que j'ai créé un achat, je ne peux/veux plus effacer l'utilisateur qui a créé cet achat.

    Je voudrais, tout en gardant cet utilisateur (dans ma table UserProfile) pouvoir lui supprimer l'accès à l'application (en supprimant donc son password dans la table webpages_Membership).

    Je voudrais aussi, pouvoir, si l'envie m'en prend , pouvoir lui donner à nouveau accès à l'application. (l'avantage d'avoir garder son UserId est qu'il aura, dès qu'il se reconnecte, accès à tout son historique).

    Je voudrais donc pouvoir supprimer dans "webpages_Membership" le password d'un utilisateur (pas le changer).

    Je voudrais aussi pouvoir remettre un password à un utilisateur qui n'en a pas.

  4. #4
    Membre du Club Avatar de k4st0r42
    Homme Profil pro
    Artisan numérique
    Inscrit en
    Janvier 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisan numérique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 48
    Points : 68
    Points
    68
    Par défaut
    Dans ce cas, tu ne peux pas jouer avec l'attribut "IsApproved" du MemberShip ?
    Le fossé séparant théorie et pratique est moins large en théorie qu’il ne l’est en pratique.

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2013
    Messages : 76
    Points : 143
    Points
    143
    Par défaut
    En fait, Simple Membership est utilisé par défaut dans les templates MVC 4.
    Mais il est toujours possible d'utiliser les providers classique.

    Les providers classiques ne permettent pas l'utilisation d'OAuth. Pour les utiliser, il suffit de récupérer le AccountController d'un projet MVC 3 par exemple.

    SimpleMembership a été crée afin d'être un peu plus léger que le SqlMembershipProvider classique et surtout plus simple à intégrer à l'application.

    Le but est de pouvoir faire un maximum par programmation afin de l'intégrer au mieux à l'application.

    En fait avec SimpleMembership, tu peux avec des utilisateurs qui se connecte sans avoir de membership en base de donnée (utilisation de OAuth).

    Un compte utilisateur est donc facilement "supprimable". il faut pour ça supprimer les enregistrements dans les tables webpages_Membership et webpages_OAuthMembership (si utilisation de OAuth). L'utilisateur ne pourra plus se connecter mais tu garde les informations sur l'utilisateur.

    Pour recréer un compte local pour cet utilisateur, tu pourra utiliser la méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WebSecurity.CreateAccount("Login","Password");

    Après la tables UserProfiles est personnalisable, il est possible de la renommer, de changer le nom de la clé primaire et du nom d'utilisateur.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Points : 491
    Points
    491
    Par défaut
    Merci g.arnaud pour tes commentaires.

    Effectivement créer un compte je sais faire avec WebSecurity.CreateAccount("Login","Password");

    Par contre, ce que je cherche, ce serait d'une part un truc du style:
    WebSecurity.AddPassword("LoginExistant","NouveauPassword");
    en comprenant bien que NouveauPassword n'est pas un changePassword mais bien le fait d'ajouter un Nouveau Password à un LoginExistant (qui n'avait donc pas ou plus de password.)

    et d'autre part un truc du style WebSecurity.RemovePassword("LoginExistant");

  7. #7
    Membre habitué
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2013
    Messages : 76
    Points : 143
    Points
    143
    Par défaut
    Si tu regarde le fonctionnement de l'action Manage dans ton AccountControleur
    C'est bien CreateAccount qui est utilisé pour créer un mot de passe (compte local) à un utilisateur se connectant via OAuth(google par exemple).

    Tu peux donc l'utiliser pour remettre un mot de passe à un utilisateur qui n'en a plus.

    Il me semble pas avoir vu un fonction pour supprimer un compte local à un utilisateur.
    Mais, c'est faisable par une simple requète SQL.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Points : 491
    Points
    491
    Par défaut
    Merci pour ces réponses.

    Je vai mettre ça en place.

  9. #9
    Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2013
    Messages : 39
    Points : 59
    Points
    59
    Par défaut
    Citation Envoyé par Golzinne Voir le message
    Je voudrais, tout en gardant cet utilisateur (dans ma table UserProfile) pouvoir lui supprimer l'accès à l'application (en supprimant donc son password dans la table webpages_Membership).
    As-tu pensé a utiliser des roles pour cela, plutot que de jouer avec les mots de passe, les enlever et les remettre?

    Il me semble que les rôles sont faits exactement pour ça, authoriser, où au contraire, interdire, l'accés à tout où partie du site.

    De plus, une simple annotation sur un controleur va permettre de restreindre l'accés à toutes les méthodes de ce controlleur, mais on peut aussi mettre ce controle au niveau de chaque méthode.

    Example:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     [InitializeSimpleMembership]
        [BgCustomAuthorize(Roles="Administrator", Message="You need to login as Administrator to access this page.")]
        public class SimpleMembershipAdministrationController : BaseController

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Points : 491
    Points
    491
    Par défaut
    Bonjour et merci pour cette réponse BernieG.

    Les rôles, j'utilise, mais ici je voudrais qu'un utilisateur qui n'a plus les droits (un employé qui aurait quitté la société, un client qui serait arrivé en fin d'abonnement,...) n'ait même plus accès au site.

  11. #11
    Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2013
    Messages : 39
    Points : 59
    Points
    59
    Par défaut
    Citation Envoyé par Golzinne Voir le message
    Bonjour et merci pour cette réponse BernieG.

    Les rôles, j'utilise, mais ici je voudrais qu'un utilisateur qui n'a plus les droits (un employé qui aurait quitté la société, un client qui serait arrivé en fin d'abonnement,...) n'ait même plus accès au site.
    OK, je comprends, et ?

    Classiquement (mais bien sûr ça peut être different chez toi, donc à adapter), la page d'accueil d'un site MVC répond à la requete sur HomeController, Méthode Index. Il me semble que si tu faisais quelque chose comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [InitializeSimpleMembership]
        [BgCustomAuthorize(Roles="Banni", Message="Vous ne pouvez pas accepter à cette page.")]
        public class HomeController : BaseController
    Il devrait suffire de définir dans la méthode CustomAuthorize qu'un utilisateur ayant ce role n'est pas authentifié, même si son nom d'utilisateur et mot de passe sont valides, pour obtenir le résultat souhaité sans bricolages....

    Une autre solution serait peut-être d'ajouter un flag booléen dans la table utilisateurs, du style "HasNotBeenLourdéYet", et toutes les opérations d'authorizations ne se font que si ce flag n'est pas à true?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. simple quote et double quote
    Par sam01 dans le forum Langage
    Réponses: 2
    Dernier message: 24/06/2010, 17h05
  2. déspécialiser quote simple
    Par barnabe_est dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/07/2007, 17h26
  3. Variable avec quotes(simple ou double)dans un input
    Par -Neo- dans le forum Langage
    Réponses: 1
    Dernier message: 25/06/2007, 11h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo