J'ai un site intranet ASP.NET 4.0 qui utilise l'authentification Windows et s'exécute normalement en tant qu'utilisateur IIS par défaut. Je voudrais usurper l'identité de l'utilisateur authentifié et agir en leur nom. Plus précisément, si cet utilisateur est un administrateur de domaine, je souhaite qu'il puisse surveiller les services s'exécutant sur un certain nombre de serveurs, démarrer et arrêter ces services et redémarrer ces serveurs, à partir de la page intranet.Gestion des machines sur le réseau à l'aide d'un site intranet ASP.NET avec authentification Windows
Jusqu'à présent, je peux basculer sur le contexte pour emprunter l'identité de l'utilisateur authentifié et je peux vérifier les groupes AD de l'utilisateur pour déterminer s'il s'agit d'un administrateur de domaine. Mais lorsque je tente d'obtenir l'état des services en cours d'exécution sur les autres serveurs, je reçois l'erreur suivante:
Cannot open Service Control Manager on computer 'MyServer'. This operation might require other privileges. ---> System.ComponentModel.Win32Exception: Access is denied
Il fonctionne très bien dans Visual Studio localement. Mais pas lorsque le site intranet est déployé sur le serveur Web interne.
Dans le Page_Load
je fais ceci:
'Switch from IIS User to the currently authenticated Admin user
Dim impersonationContext As WindowsImpersonationContext = Nothing
Dim authenticatedIdentity As WindowsIdentity = DirectCast(HttpContext.Current.User.Identity, WindowsIdentity)
impersonationContext = authenticatedIdentity.Impersonate()
Et puis en cas de RowDataBound
GridView
, je fais ceci:
'Check if service exists and is running
Dim arrServices() As ServiceController = ServiceController.GetServices(machineName)
If Not arrServices.Any(Function(o) o.ServiceName = SERVICE_NAME) Then
' Service is missing...
Else
Dim oServiceController As New ServiceController(SERVICE_NAME, machineName)
If oServiceController.Status = ServiceControllerStatus.Running Then
' Service is running...
Else
' Service has stopped...
End If
End If
Comment puis-je gérer d'autres serveurs pour le compte de l'utilisateur à l'aide Authentification Windows sur ce site intranet?
Le code n'arrête pas simplement le traitement en mode silencieux. Peut-être devriez-vous montrer le code pertinent dans la question. – mason
@mason S'il vous plaît voir ma question révisée. J'ai essayé d'attraper ce qui supprimait l'erreur. S'il vous plaît voir le vrai message d'erreur maintenant. – John