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 :

[OWIN] Connexion Compte Microsoft


Sujet :

ASP.NET MVC

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 97
    Points : 59
    Points
    59
    Par défaut [OWIN] Connexion Compte Microsoft
    Bonjour à tous,

    J'ai développé une application qui fait des calls API vers un vCenter.
    J'ai donc un système de login avec role (Admin ou user) qui utilise l'adresse email + mot de passe de l'utilisateur.

    De base, j'ai donc ces deux classes qui gère la connexion (création de session) et l'authorisation sur les différentes Action des Contrôleurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using vCenterManager.Models.User;
     
    namespace vCenterManager.Website.Tools
    {
        public class SessionManager
        {
            private const string SESSION_KEY = "LoggedUser";
     
            #region Singleton
            private static SessionManager _Instance;
     
            public static SessionManager Instance
            {
                get { return _Instance ?? (_Instance = new SessionManager()); }
            }
     
            private SessionManager() { }
            #endregion
     
            public UserSession Session
            {
                get
                {
                    if (HttpContext.Current.Session[SESSION_KEY] == null)
                    {
                        HttpContext.Current.Session[SESSION_KEY] = new UserSession();
                    }
     
                    return (UserSession)HttpContext.Current.Session[SESSION_KEY];
                }
     
                set { HttpContext.Current.Session[SESSION_KEY] = value; }
            }
     
            public bool IsAuthenticated
            {
                get { return Session.UserID > 0; }
            }
        }
    }
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Web;
    using System.Web.Mvc;
    using vCenterManager.DAL;
    using vCenterManager.Models.User;
     
    namespace vCenterManager.Website.Tools
    {
        public class AuthorizationManager : AuthorizeAttribute
        {
            private List<Role> _roles = new List<Role>();
     
            public AuthorizationManager()
            {
                using (vCenterManagerContext db = new vCenterManagerContext())
                {
                    _roles = db.Roles.ToList();
                }
            }
     
            public AuthorizationManager(params string[] MyRoles)
            {
                using (vCenterManagerContext db = new vCenterManagerContext())
                {
                    foreach (string item in MyRoles)
                    {
                        Role _role = db.Roles.FirstOrDefault(r => r.Name.ToUpper() == item.ToUpper());
                        _roles.Add(_role);
                    }
                }
            }
     
            public override void OnAuthorization(AuthorizationContext filterContext)
            {
                UserSession _user = SessionManager.Instance.Session;
     
                if (_user.UserID <= 0)
                {
                    filterContext.Result = new RedirectResult("/User/Login");
                }
                else if (!_roles.Any(r => r == _roles.FirstOrDefault(x => x.RoleID == _user.Role.RoleID)))
                {
                    filterContext.Result = new HttpStatusCodeResult(HttpStatusCode.Unauthorized);
                }
            }
        }
    }
    Voici également "HomeController" sur lequel je vérifie qu'un utilisateur est connecté pour afficher la page,sinon, je redirige vers la page login.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    using System.Web.Mvc;
    using vCenterManager.Website.Tools;
     
    namespace vCenterManager.Website.Controllers
    {
        public class HomeController : Controller
        {
            public ActionResult Index()
            {
     
                if (!SessionManager.Instance.IsAuthenticated)
                {
                    return RedirectToAction("Login", "User");
                }
     
                return View();
            }
        }
    }
    Je souhaite maintenant ajouter la possibilité pour l'utilisateur de se connecter avec son compte Microsoft, pour cela, j'ai suivi les instructions trouvées sur cette page :

    https://docs.microsoft.com/en-us/azu...-v2-asp-webapp

    Mais cela ne fonctionne pas.

    Par contre, si je change mon "HomeController" par ceci (j'enlève la vérification de session) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    using System.Web.Mvc;
    using vCenterManager.Website.Tools;
     
    namespace vCenterManager.Website.Controllers
    {
        public class HomeController : Controller
        {
            public ActionResult Index()
            {
                return View();
            }
        }
    }
    Cela fonctionne.

    Je pense donc que si je fais la redirection pour afficher la page login, une session (vide) est créée et - je ne sais pas pourquoi - empêche le transmission du cookie microsoft.

    Je précise qu'à la base, je ne suis pas développeur. Je me suis lancé dans ce développement parce que j'aime ça et que j'ai du temps à y consacrer.
    Par contre, cette application est actuellement utilisée en production (et j'en suis plutôt satisfait )

    Je ne sais pas si mon analyse est bonne et encore moins comment résoudre ce problème.

    Si une bonne âme passe par ici

    Un grand merci d'avance !

    Bertrand

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 066
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 066
    Points : 4 233
    Points
    4 233
    Par défaut
    Hello de base tu as déjà des classe pour savoir si un utilisateur est connecté :
    https://docs.microsoft.com/fr-fr/dot...tframework-4.8

    Je pense que de l'avoir fait à ta sauce doit pas simplifier les choses, surtout qu'il y a déjà tout ce qu'il faut pour bosser avec la classe de base sur asp.net,en plus tu dois pas pouvoir utiliser les attributs authorize je pense.

    https://docs.microsoft.com/fr-fr/asp...spnet-identity

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 97
    Points : 59
    Points
    59
    Par défaut
    Ma classe hérite de AuthorizeAttribute donc, si j'ai accès aux attributs.

    Ceci dit, merci pour les liens, je vais regarder ça...

    Bertrand

  4. #4
    Nouveau membre du Club
    Inscrit en
    Mai 2011
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 29
    Points : 35
    Points
    35
    Par défaut
    merci

Discussions similaires

  1. Connexion frauduleuse compte Microsoft ?
    Par Invité dans le forum Sécurité
    Réponses: 6
    Dernier message: 29/01/2017, 17h20
  2. Réponses: 0
    Dernier message: 31/10/2015, 11h02
  3. Connexion compte Microsoft impossible
    Par black-hawk-down dans le forum Windows 10
    Réponses: 2
    Dernier message: 07/09/2015, 11h03
  4. Connexion Java Microsoft
    Par danduril dans le forum JDBC
    Réponses: 1
    Dernier message: 23/10/2006, 11h07
  5. Connexion compte ftp
    Par tomfoot dans le forum Composants VCL
    Réponses: 3
    Dernier message: 27/02/2006, 14h37

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