none
Ouverture et Fermeture de Session via un Web Service RRS feed

  • Question

  • Bonjour à tous,

    Voilà je travaille actuellement sur un projet, et on a reçu une demande plutôt spécifique.

    Une personne, badge sur une borne et l'action de badget ferait en sorte que sa session windows se log. Une autre personne arrive à sa place et bagde, l'action de rebadger ferait que la session se ferme et ouvre celle de la personne qui vient d'arriver.

    La question est, existe t'il en C# une API ou autre chose, permettant l'ouverture et la fermeture de session windows ?

    Pour le moment je considère que j'ai tout les paramètres (ip, login, password) en mains, mon soucis premier étant de trouver une solution pour ouvrir et fermer une session.

    Merci et bonne journée à vous.

    Leonheart.
    jeudi 8 octobre 2009 13:14

Toutes les réponses

  • Bonjour,

    je ne suis pas 100% sur d'avoir compris la question à cause du terme "Web Service" dans le titre.

    Si le besoin est d'ouvrir une vraie session windows à partir d'un badge à la place d'un couple login/mot de passe, il faut se tourner du côté de Gina pour les vieilles versions de Windows et vers les Credentials Providers depuis Vista. Mais ce sera plutôt C++que C#. Voici un lien : http://msdn.microsoft.com/fr-fr/magazine/cc163489.aspx

    Si on peut avoir une session banalisée ouverte et qu'on a juste besoin de faire des actions spécifiques avec un compte Windows authentifié à l'aide du badge, l'API Win32 à utiliser est LogonUser... qui est accessible via l'interop et donc le retour (TOKEN) peut être utilisé directement avec certaines classes .NET comme WindowsIdentity.

    Bonne journée,
    Alain
    vendredi 9 octobre 2009 09:15
  • Merci pour la réponse :)

    Effectivement en poussant bien loin mes recherches j'ai trouvé qu'il fallait utiliser l'API Win32 avec le LogonUser, LogonUserEx etc, mais je ne trouve pas d'exemple de code d'utilisation ...

    Pour ce qui est du terme Web Service, il est vrai que celui est assez flou. En fait, je vais créer un service windows qui aura la possibilité de log et de delog un user. Ce service sera requête via le réseau à partir d'une machine distante.

    Pour le moment, le logoff est fait. Je m'attarde sur la question du logon.

            [DllImport("advapi32.dll", SetLastError = true)]
    
            public static extern bool LogonUserEx(
    
              string lpszUsername,
              string lpszDomain,
              string lpszPassword,
              int dwLogonType,
              int dwLogonProvider,
              out IntPtr phToken,
              IntPtr ppLogonSid, // nullable
              IntPtr ppProfileBuffer, // nullable
              IntPtr pdwProfileLength, // nullable
              IntPtr pQuotaLimits // nullable
    
            );
    Donc j'ai le prototype de la fonction, mais pour ce qui est des paramètres certains reste flou quant à leur valeur possible ...
    vendredi 9 octobre 2009 09:26
  • Re,

    Bon, j'arrive à utiliser le LogonUser.

    Maintenant que le retour est "positif", est il possible de charger graphiquement son environnement de travail ?
    vendredi 9 octobre 2009 09:51
  • Re,

    Bon, j'arrive à utiliser le LogonUser.

    Maintenant que le retour est "positif", est il possible de charger graphiquement son environnement de travail ?


    Non, c'est ce que j'avais expliqué dans ma première réponse :
    1) si le besoin est d'ouvrir une VRAIE session Windows comme on le fait d'habitude avec le coupe login/mot de passe, alors c'est Gina sur XP et les Credentials Providers sur Vista et Seven qu'il faut utiliser
    2) si on peut vivre avec une session ouverte avec un compte banalisé (i.e. une espèce de compte "invité") et qu'on n'a besoin de l'authentification windows de l'utilisateur que pour certaines opérations, par exemple l'accès à un partage réseau avec cette authentification, alors LogonUser fera l'affaire. Attention : un LoginUser exécuté au sein d'un web service distant ne sert à rien en local !

    Tout dépend donc de ce qu'on veut vraiment faire : après un LogonUser, on peut faire un Impersonate (accessible directement dans les classes .NET) et lancer une application sous le nom de l'utilisateur dont on vient de faire le Logon : la session "globale" et l'explorateur s'exécuteront sous le compte banalisé mais la nouvelle application sous le compte de l'utilisateur, et cela suffit dans un certain nombre de cas (par exemple, celui d'un poste partagé où les utilisateurs se succèdent rapidement et n'utilisent qu'une seule application)

    Alain

    lundi 12 octobre 2009 08:10
  • Re,

    Bon, j'arrive à utiliser le LogonUser.

    Maintenant que le retour est "positif", est il possible de charger graphiquement son environnement de travail ?


    Non, c'est ce que j'avais expliqué dans ma première réponse :
    1) si le besoin est d'ouvrir une VRAIE session Windows comme on le fait d'habitude avec le coupe login/mot de passe, alors c'est Gina sur XP et les Credentials Providers sur Vista et Seven qu'il faut utiliser
    2) si on peut vivre avec une session ouverte avec un compte banalisé (i.e. une espèce de compte "invité") et qu'on n'a besoin de l'authentification windows de l'utilisateur que pour certaines opérations, par exemple l'accès à un partage réseau avec cette authentification, alors LogonUser fera l'affaire. Attention : un LoginUser exécuté au sein d'un web service distant ne sert à rien en local !

    Tout dépend donc de ce qu'on veut vraiment faire : après un LogonUser, on peut faire un Impersonate (accessible directement dans les classes .NET) et lancer une application sous le nom de l'utilisateur dont on vient de faire le Logon : la session "globale" et l'explorateur s'exécuteront sous le compte banalisé mais la nouvelle application sous le compte de l'utilisateur, et cela suffit dans un certain nombre de cas (par exemple, celui d'un poste partagé où les utilisateurs se succèdent rapidement et n'utilisent qu'une seule application)

    Alain


    Merci pour la réponse. Ce que je veux vraiment faire, c'est effectivement ouvrir une VRAIE session windows avec chargement de l'environement de travail.

    Existe t'il quelque part des exemples d'utilisation de GINA et/ou de Credentials Providers ?

    Merci.

    Leonheart.
    jeudi 15 octobre 2009 10:09
  • Merci pour la réponse. Ce que je veux vraiment faire, c'est effectivement ouvrir une VRAIE session windows avec chargement de l'environement de travail.

    Existe t'il quelque part des exemples d'utilisation de GINA et/ou de Credentials Providers ?

    Il y en a généralement dans le Platform SDK (installé généralement sous C:\program files\microsoft sdks\windows\) et il y a aussi des explications et un exemple dans l'article dont j'ai donné le lien dans ma première réponse, qui doit être un bon point de départ : http://msdn.microsoft.com/fr-fr/magazine/cc163489.aspx

    Alain
    lundi 19 octobre 2009 05:05