Bonjour,
Je souhaite faire une application extranet où chaque utilisateur doit être authentifié.
Afin de ne pas m'embêter à gérer à la main la sécurité (login, politique de mot de passe, mise à jour entre le site et LDAP, etc.) je souhaite utiliser l'authentification Intégrée Windows : ainsi, l'utilisateur se connecte au site en indiquant son login/pass du domaine.
Et pour aller jusqu'au bout, je souhaite gérer la sécurité/traçabilité dans SQL Server avec le même compte.
J'ai donc activé l'emprunt d'identité.
Ca m'a l'air de fonctionner côté ASP.NET.
En effet, une fois authentifié, je peux accéder au site avec un mot de passe valide et la variable suivante est bien initialisée avec le nom d'utilisateur connecté :
Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString()
Fort de ça, je tente de me connecter depuis le site à SQL Server avec la chaîne suivante :
Code csharp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2Server=localhost;Database=MaBase;Integrated Security=true
Evidement, l'utilisateur a bien accès à la base de données.
Pourtant j'ai l'erreur suivante :
Je ne vois pas ce qui cloche.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 [Win32Exception (0x80004005): Accès refusé] [SqlException (0x80131904): Une erreur liée au réseau ou spécifique à l'instance s'est produite lors de l'établissement d'une connexion à SQL Server. Le serveur est introuvable ou n'est pas accessible. Vérifiez que le nom de l'instance est correct et que SQL Server est configuré pour autoriser les connexions distantes. (provider: Named Pipes Provider, error: 40 - Impossible d'ouvrir une connexion à SQL Server)]
Si je force l'identité de mon Pool d'application avec l'utilisateur en question, ça marche bien !
-- Edit : Si je force mon pool d'application avec un utilisateur qui n'a pas accès à la base, ça fait une autre erreur (plus compréhensible d'ailleurs) :
On dirait que dans le cadre de l'emprunt d'identité, le process IIS n'a pas accès à certaines ressources, à commencer par le réseau... Un peu comme "LocalService".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 [SqlException (0x80131904): Échec de l'ouverture de session de l'utilisateur 'IIS APPPOOL\MonPool'.] System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, DbConnectionPool pool, String accessToken, Boolean applyTransientFaultHandling) +1370
Comment contourner ?
Partager