[ASP.net / IIS][Résolu] Faire du SSO - Reconnaître l'utilisateur Windows

Hum, le code est ni plus ni moins la même que ma 1e et 3e solution.

Par contre, j’aimerais bien connaitre le contenu de ton user. Je veux dire ta variable user pointe sur quel type d’utilisateur ?

Est ce un utilisateur Admin (donc qui a les droit d’écriture, lecture, modification, suppression) que tu as pris soin d’ajouter dans le Gestionnaire de l’ordinateur serveur ? ou bien …

Edit: Quelqu’un connait un moyen de désactiver l’impersonation dans le codebehind mais sans toucher au web.config ?

Hoplà je reviens sur le topic pour qu’on puisse m’éclairer sur cet article fort intéressant (en anglais).

Et plus précisément lorsque l’auteur mentionne ceci :

Que veut il dire par « the permissions of the current user » ? Est ce les permissions de l’utilisateur définit au niveau de la machine serveur ? ou bien des permissions qui sont définit sur la machine cliente de l’utilisateur ?

Bon,
j’essaye de repondre vite fais avant de me casser…Si il y a des choses qui te semble évidente désolé…j’fais mon possible

Dans ton web.config tu as (entre autre) 2 possibilités :

dans ce cas, si tu as parametré ta sécurité IIS pour ton site avec “Authentification integre windows”, c’est le compte de l’utilisateur qui execute, avec ces autorisations, le process.

dans ce cas, c’est le compte ‘TOTO’ qui est utilisé.

le code que j’ai mis au dessus, permet de basculer de 2) à 1) par programme. C’est a dire que le code s’execute comme ‘toto’, puis comme (utilisateur connecté), puis revient à ‘toto’

J’utilise juste :

sans aucun autre paramètre. Pourquoi je n’ai pas mis le false, tout simplement parce que l’application ne détecte pas le login utilisateur windows de la machine cliente mais plutot le login de la machine serveur/autres qui est définit soit dans le Pool de IIS (localserveur, reseau ou je ne sais plus quel param) soit dans la sécurité de l’appli sous IIS (anonyme/authentification windows).

Dans tous les cas, j’option Authentification Windows est coché sous IIS. Et j’ai décoché l’option Connection Anonyme.

Edit :
J’utilise cette méthode pour récupérer le login utilisateur windows :

public string GetCurrentUserLogin() { System.Security.Principal.WindowsPrincipal wp = new System.Security.Principal.WindowsPrincipal(System.Security.Principal.WindowsIdentity.GetCurrent()); string[] _domainPathUser = wp.Identity.Name.Split('\\'); return _domainPathUser[_domainPathUser.Length - 1]; }

Edit bis avant de partir :
J’ai peut etre trouvé une solution par contre je ne sais pas de quel librairie appartient la variable “Thread.CurrentPrincipal;”.

Source de la solution ou pas : visualstudiomagazine

Hoplà bonne nouvelle j’ai trouvé la solution à mon problème.
Donc tout d’abord me suis complètement planté dans l’utilisation des méthodes natives qui me permettent de récupérer le login utilisateur windows.

Au lieu d’utiliser la variable httpContext.User.Identity.Name, j’ai pris b.Ident
ity.Name[/b]. Qui au final me retourne le login de l’utilisateur si seulement le paramètre est définit dans le web.config.

Dans le cas contraire, j’obtiens le login utilisateur définit dans le Pool définit sur IIS qui peuvent prendre les valeurs suivantes : systeme local, service local, service réseau ou encore un compte utilisateur.

Donc pour résoudre mon problème j’ai besoin de

  • désactiver l’impersonation au niveau de mon web.config.
  • paramétrer la sécurité du Pool IIS en systeme local (il a donc tous les droits).
  • utiliser la variable HttpContext.User.Identity.Name au lieu du WindowsIdentity.GetCurrent() + cast (pour l’usage standard de l’appli)
  • utiliser la variable ((WindowsPrincipal)System.Security.Principal.WindowsIdentity.GetCurrent()).Ident
    ity.Name au moment d’effectuer l’impersonation
  • utiliser le code qui permet d’effectuer l’impersonate au moment voulu (afin d’utiliser le profil systeme local) puis de revenir au profil initial.

(Arrrrrrgggggggg…Mec qui souffre apres détérage de thread)

j’ai, à peu près, le même problème : Sur un intranet, faire en sorte que la connection à SQL Server se fasse avec l’identité de la session windows ou tourne le client .

Client sous IE.
Une appli ASP.NET sur un serveur IIS (J’ai décoché ‘anonymous’ et coché Authentification integré de windows)
Un autre serveur avec SQL2000.

Je recupéré bien le nom du client mais je n’arrive pas à trouver un ‘credential’ qui me permetrais de me connecter à SQL SERVER.

Un truc ?

Merci

PS : "Mais pourquoi veut il faire ca ?"
Mon appli ASP.NET doit cohabiter avec des clients lourds qui se connectent en SSO et, au niveau de SQLSERVER les vues intègres la notion d’habilitation avec des jointure sur des tables d’habilitation: Quand M.Machin se connecte il ne voit pas les memes lignes que Monsieur Truc (ceci avec le ‘system_user’ SQL SERVEUR)

Bon, le seul truc que j’ai trouvé, c’est ca :

[codebox]
System.Security.Principal.IPrincipal p = this.User;
System.Security.Principal.WindowsIdentity id = (System.Security.Principal.WindowsIdentity)p.Identity;
// Je Bascule en Iimpersionalisation pour que l’ID du client se connecte à la base et execute la requete
System.Security.Principal.WindowsImpersonationContext wic = id.Impersonate();
try
{
DataView Mydv;
SqlDataSource1.ConnectionString = “Data Source=MONSERVEUR;Initial Catalog=MABASE;Integrated Security=True”;
SqlDataSource1.SelectCommand = “Select * from MATABLE”;
Mydv = (DataView)SqlDataSource1.Select(new DataSourceSelectArguments());
}
finally
{
//je retablie
wic.Undo();
}
[/codebox]
Si ce n’est pas propre, n’hésitez pas. j’aurais préféré récupérer un ‘credential’ que j’aurais transmis sur la connection à la base de donnée…Mais j’ai pas trouvé !