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 :

Authentification, Header & SSO [Débutant]


Sujet :

ASP.NET MVC

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Authentification, Header & SSO
    Bonjour, bonjour !

    Après différentes recherches, je me permet de vous solliciter car je pense ne pas bien avoir compris le mécanisme. Voilà le topo:
    Je travaille sur un projet web ASP.NET MVC et suis actuellement en train de développer la partie Authentification. Je souhaiterais pouvoir bénéficier des outils offerts par le framework (à savoir, les Authorize, User.Identity & co).
    Après recherches, j'ai cru comprendre que lors d'une authentification par formulaire, il fallait valider le ModelState et vérifier les infos login/mdp en BDD et si OK, créer un cookie (FormsAuthentication.SetAuthCookie) puis rediriger l'utilisateur.

    Mon cas est particulier: mes utilisateurs se connectent déjà via un SSO qui s'occupe du login/mdp, crée un cookie et transmet l'identifiant utilisateur via le Header. Mon application reçoit donc le login via Header. Je pensais donc: lire le header, le vérifier et si valide, créer le cookie, sinon, rediriger à la page d'identification du SSO.

    Voilà le code source correspondant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // In Global asax: 
    protected void Session_Start()
    {
        String username = Request.Headers["Auth-User"];
     
        if (username != null)
        {
            Session.Add(username, "AuthUser");
            FormsAuthentication.SetAuthCookie(username, true);       
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // In my controller
    public ActionResult Login()
    {
        if (User.Identity.IsAuthenticated)
        {
            ViewData["headers"] = HttpContext.User.Identity.Name;
        }
        else 
        {
            ViewData["headers"] = "fail";
        }
        return View();
    }
    Dans mon global.asax: pas de pb, il lit le Header, stock l'info dans la variable de session et a priori, crée le cookie de connexion. Par contre, impossible d'exploiter User.Identity dans mon controller.

    Un autre topic avec pb similaire: http://stackoverflow.com/questions/2...authentication
    L'auteur du topic à l'air de s'en être sortis mais ne fournit pas l'info dans le détail :/

    Auriez-vous des pistes qui pourraient m'aider à avancer ? Merci d'avance !!

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    N'ayant pas trouvé de solution viable malgré mes recherches, j'ai choisis de tout gérer avec les variables de Session pour le moment.
    Pas de cookie donc, et je ne pense pas pouvoir bénéficier de la gestion des rôles du type [Authorize] pour le moment.

    La question reste ouverte, si certains ont des idées/tutos pour m'aider à mieux comprendre où je me plante

    Merci d'avance !

  3. #3
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    La solution donnée sur le lien que tu as indiqué est pour MVC4. Pour MVC5 et le prochain 6, les choses ont évolué donc il n'est pas conseillé d'utiliser FormsAuthentication.

    Si tu es en MVC4 ou en-dessous, tu dois agir dans l'évènement Application_AuthenticateRequest du global.asax.
    Pour MVC5+, il suffit de créér un filtre personnalisé.

    Dans les 2 cas, la logique est la même : tu récupères ton header, et s'il est valide, tu crées un User (une identité) que tu injectes dans le contexte HTTP.

    Si tu veux plus d'infos, précise la version de MVC que tu utilises.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Tout d'abord, merci de ta réponse !

    Citation Envoyé par DotNetMatt Voir le message
    Si tu es en MVC4 ou en-dessous, tu dois agir dans l'évènement Application_AuthenticateRequest du global.asax.
    En l’occurrence, je suis en MVC2 (Visual Studio 2010 / Framework .NET 4). Pourrais-tu m'éclairer sur la différence entre Session_Start() et Application_AuthenticateRequest() ? J'ai lu que Session_Start se déclenchait à chaque nouvelle session et AuthenticateRequest à chaque authentification. Pour mon appli, l'authentification a lieu en amont (SSO), du coup, ne vaut-il mieux pas utiliser Session_Start ?

    Citation Envoyé par DotNetMatt Voir le message
    Dans les 2 cas, la logique est la même : tu récupères ton header, et s'il est valide, tu crées un User (une identité) que tu injectes dans le contexte HTTP.
    Par injection, tu sous-entends HttpContext.Current.Session ?

    Merci encore de ton temps et de ta réponse !

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Bon, j'ai trouvé une solution qui a l'air de fonctionner. Dans le global.asax, on récupère l'identifiant utilisateur transmis par le SSO via le Header:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    protected void Session_Start()
    {
          String username = HttpContext.Current.Request.Headers["maVariable"];
     
          if (!String.IsNullOrEmpty(username))
          {
               HttpContext.Current.Session["Login"] = username;
          }
          else
          {
               FormsAuthentication.RedirectToLoginPage();
          }
    Dans le LoginController, je crée un utilisateur que je peux ensuite passer en Session, et surtout: je crée un Cookie d'authentification.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public ActionResult Login()
    {            
         Utilisateur user = new Utilisateur((string)HttpContext.Session["Login"]); 
         HttpContext.Session["User"] = user;
     
         FormsAuthentication.SetAuthCookie(user.login, false);
         return RedirectToAction("monAction", "monController");
    }
    Du coup, dans mes autres contrôleurs, je peux utiliser les annotations comme [Authorize] ou exploiter mon HttpContext.User.Identity, et agir sur mon utilisateur, qui est en Session.
    En espérant que ça puisse guider quelqu'un un jour

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Petite rectification:

    Finalement, le comportement du Session_Start ne me convenait pas: Si deux utilisateurs se connectaient à la suite, d'un même navigateur, c'est toujours le premier utilisateur qui était connecté car Session_Start n'était pas appelé.

    J'ai donc mis toutes les vérifications dans le ActionResult Login et pu de problème

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

Discussions similaires

  1. SSO LemonLDAP, authentification et serveur d'applications
    Par Mouns007 dans le forum Plateformes (Java EE, Jakarta EE, Spring) et Serveurs
    Réponses: 1
    Dernier message: 10/09/2007, 18h20
  2. [SQL] Modification du "header" lors d'authentification sql
    Par nicolas2603 dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 04/12/2006, 16h11
  3. Basic Authentification et SSO
    Par hisy dans le forum Langage
    Réponses: 4
    Dernier message: 16/02/2006, 11h14
  4. Réponses: 2
    Dernier message: 06/02/2006, 09h28

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