2009-09-11 10 views
1

Dans mes questions précédentes, je demandais comment utiliser l'authentification Windows dans mon application. Cela fonctionne maintenant, les utilisateurs peuvent se connecter avec un compte, mais j'ai un scénario d'accès à la base de données, je ne trouve rien sur.ASP.NET Windows Authentification Usurpation d'identité Problème

Fondamentalement, je vais avoir plusieurs serveurs et voici le problème.

Sur certains serveurs, ils disposeront de comptes d'authentification Windows pour le serveur de base de données SQL Server. Par conséquent, l'utilisation de l'emprunt d'identité de leurs informations d'identification doit être utilisée. Mais je remarque que c'est un paramètre global dans le web.config (pas par connexion) et dans un cas je veux utiliser le compte d'authentification Windows des applications (IIS ou ASP) plutôt que les utilisateurs. (Accès à ma base de données de configuration)

Comment pourrais-je y parvenir?

Application Web est ASP.NET MVC hébergé sur Server 2003/2008 IIS 6/7/7.5 avec les clients étant Windows XP et au-dessus. À l'aide de SQL Server Express/Standard 2005/2008 mélangé.

Répondre

5

L'emprunt d'identité est effectué sur l'ensemble du site ou vous pouvez l'activer manuellement. Ce que vous ne pouvez pas faire est de l'éteindre manuellement, j'ai peur, et cela ne peut pas non plus être fait via les chaînes de connexion.

Donc, fondamentalement, l'usurpation d'identité se tourner hors tension, puis envelopper les appels de base de données lorsque l'usurpation d'identité est nécessaire comme ceci:

using System.Security.Principal; 

WindowsIdentity winId = (WindowsIdentity)HttpContext.Current.User.Identity; 
WindowsImpersonationContext ctx = null; 
try 
{ 
    ctx = winId.Impersonate(); 
    // Do your thing 
} 
catch 
{ 
} 
finally 
{ 
    if (ctx != null) 
     ctx.Undo(); 
} 

Le MSDN P&P guide to asp.net impersonation a plus.

+0

Merci que cette technique fonctionne et est acceptable :) – Phil

0

Utilisez le contrôleur de domaine - afin qu'il puisse propager les mêmes informations d'identification pour un seul utilisateur sur l'ensemble du domaine.

La deuxième astuce pour les groupes de travail - créer le même compte d'usurpation d'identité (avec exactement le même login et mot de passe) sur les deux serveurs (ASP et SQLServer). N'oubliez pas d'accorder cette autorisation sur SQLServer.

+0

Ma question était plus lorsque l'emprunt d'identité est activé, comment puis-je l'éteindre pour une connexion spécifique à un serveur SQL. – Phil

2

Vous devrez configurer la délégation sur votre réseau afin que les serveurs ASP.NET puissent emprunter l'identité des utilisateurs sur les machines du serveur Sql. Cela suppose que vos serveurs sont sur un réseau contrôlé par Active Directory (pas de groupes de travail) et que les serveurs SQL sont sur des machines différentes de vos serveurs Web.

Vous devez configurer la délégation pour ces machines serveur de base de données où vous voulez que les utilisateurs soient empruntés et ne pas le configurer pour les machines serveur que vous voulez que le compte de processus de travail ASP.NET soit le compte accédant au serveur. Si vous ne pouvez pas le faire, vous pouvez désactiver l'authentification Windows/mixte sur les instances de Sql Server sur lesquelles vous souhaitez empêcher la délégation, puis configurer manuellement le compte Sql Server auquel se connecter dans la chaîne de connexion dans le Web. config.

+0

Merci pour certaines informations générales. – Phil

Questions connexes