1 votes

Quel compte utilise ASP (classique) lorsqu'une authentification Windows intégrée est activée ?

J'ai un fichier ASP qui tente de faire une demande de service web à un service web ASP.NET s'exécutant sur le même serveur, sous le même répertoire virtuel. Dans IIS, le répertoire virtuel est configuré pour désactiver l'accès anonyme et l'<< authentification Windows intégrée >> est activée.

Le problème est le suivant : lorsque la machine de l'utilisateur demande à exécuter la page ASP ou même manuellement exécuter le fichier .NET WebService.asmx, cela fonctionne car les informations d'identification de l'utilisateur sont transmises. Cependant, lorsque le fichier ASP tente d'appeler le service web, nous obtenons une erreur 401.2 - Non autorisé : l'accès est refusé en raison de la configuration du serveur.

Par exemple :

  • "RÉPERTOIRE\utilisateur1" à partir d'un navigateur sur la machine de l'utilisateur demande Service.asmx qui fonctionne correctement.
  • "RÉPERTOIRE\utilisateur1" à partir d'un navigateur sur la machine de l'utilisateur demande File1.asp qui fonctionne correctement.
  • _________ à partir de File1.asp sur le serveur demande Service.asmx qui renvoie 401.2

J'ai donc supposé que je devais définir des autorisations NTFS sur WebService.asmx pour permettre au compte ASP d'avoir des autorisations de lecture et d'exécution, mais je ne sais pas sous quel compte cela s'exécute, et après avoir lu certaines des réponses, il semble que nous n'arrivons pas au niveau NTFS, IIS rejette complètement la demande car l'accès anonyme est désactivé.

Cela indique-t-il que nous devons faire fonctionner le processus ASP sous un compte de domaine ?

4voto

Evan Anderson Points 140581

Classic ASP s'exécute en se faisant passer pour l'utilisateur authentifié sur le serveur dans la session HTTP. Vous devez accorder aux utilisateurs qui s'authentifient l'autorisation d'exécuter l'application classic ASP ou autoriser l'accès anonyme.

Si vous avez déjà essayé avec "Utilisateurs authentifiés" et que cela ne fonctionne pas, je dirais que vous n'avez pas de problème de permission de fichier.

Que voulez-vous dire lorsque vous dites "...le fichier ASP essaie d'invoquer le webservice..."? Voulez-vous dire que le script ASP fait une requête HTTP vers le serveur? Si c'est le cas, les informations d'identification de l'utilisateur ne seront pas transmises dans cette requête car "l'authentification Windows intégrée" ne donne pas au serveur de mot de passe en texte clair à utiliser lors de l'authentification auprès d'autres serveurs (ou lui-même).

Modifier :

D'après votre commentaire, alors, comme indiqué ci-dessus, le serveur n'aura pas d'informations d'identification avec lesquelles authentifier l'utilisateur car l'authentification Windows intégrée ne donne pas de mot de passe en texte clair à transmettre à d'autres serveurs (ou lui-même, qui est un autre serveur dans ce cas).

Vous pourriez essayer trois choses :

  • Si vous pouvez permettre l'accès anonyme à WebService.asmx, votre appel HTTP serveur-vers-serveur devrait fonctionner (vous devrez explicitement permettre l'accès anonyme en autorisant IUSR_xxx à lire le fichier et en modifiant le paramètre "Contrôle d'accès et d'authentification anonymes" pour "Accès anonyme" sur le fichier lui-même via la console de gestion IIS puisque ce fichier héritera des paramètres activés "Authentification Windows intégrée" et désactivés "Accès anonyme" du répertoire dans lequel il se trouve).

  • Si le contrôle que vous utilisez pour la requête HTTP prend en charge la fourniture transparente des informations d'identification de l'utilisateur connecté au serveur distant, vous pourriez activer l'authentification de base sur le script classic ASP (ce qui donne effectivement au serveur un mot de passe en texte clair à transmettre à d'autres serveurs) afin que votre contrôle de requête HTTP puisse transmettre ce mot de passe en clair lors de la requête pour WebService.asmx. Vous devrez alors exiger SSL pour l'accès au script classic ASP, à ce moment-là, pour éviter de transmettre des mots de passe en clair sur le réseau.

  • Enfin, vous pourriez simplement codé en dur des informations d'identification de base dans le script classic ASP et activer l'authentification de base sur le fichier WebService.asmx. Cela signifie que WebService.asmx verra toujours un accès du même utilisateur.

Aucune de ces solutions n'est très élégante. Vous rencontrez un problème "classique" que nous avons rencontré avec "classic ASP" lorsque nous essayons de nous authentifier à un niveau backend (base de données, etc) en tant que l'utilisateur qui s'est authentifié pour exécuter le script classic ASP.

1voto

David Spillett Points 22424

Si l'authentification intégrée est activée et que l'utilisateur utilise un navigateur qui effectuera une authentification intégrée à Windows et que l'utilisateur est connecté avec un compte qui se traduit par le serveur Web (par exemple, la machine cliente est sur le même domaine que le serveur Web), alors votre script s'exécutera avec le compte de cet utilisateur.

Si l'une des conditions ci-dessus n'est pas remplie (donc le serveur ne peut pas concorder un compte d'utilisateur avec le navigateur client), alors quoi que vous ayez défini en tant qu'utilisateur pour les connexions anonymes sera utilisé, IUSR_ par défaut, ou si la navigation anonyme est désactivée, l'utilisateur recevra une erreur 401.*.

Cela suppose que d'autres options d'authentification sont désactivées. Je ne suis pas sûr de ce qui prévaut si vous avez à la fois des schémas d'authentification intégrée à Windows et basique activés en même temps.

Vous pouvez voir l'utilisateur que le serveur web utilise actuellement pour les requêtes vers une zone particulière en ajoutant un script qui interroge la collection reqeust.servervariables et affiche les valeurs pertinentes - le nom d'utilisateur est là-dedans.

1voto

Dave Cross Points 17363

Il semble que vous essayez de faire une authentification "double-hop". Cela se produit généralement dans le contexte d'un service SQL backend, mais cela pourrait s'appliquer à un service distinct s'exécutant sur le même serveur je pense (je ne suis pas sûr à 100 % cependant). Recherchez dans MSKB ce terme, "double hop", et vous obtiendrez quelques documents qui expliquent comment configurer la délégation pour permettre cela de fonctionner. Voici un pour commencer, http://support.microsoft.com/kb/326985

Ce dont vous avez besoin est que le serveur IIS soit configuré pour permettre la "Délégation autorisée". Lorsque l'utilisateur est authentifié via l'authentification intégrée à Windows, il devrait obtenir un ticket Kerberos (CELA NE FONCTIONNERA PAS si vous utilisez une authentification NTLM).

Pour pouvoir effectuer une délégation, vous devrez ajouter un SPN au serveur. Assurez-vous que les utilisateurs accèdent à la page web avec le FQDN réel pour lequel le serveur possède un SPN dans AD. Le Service Principal Name (SPN) est ce que l'agent Kerberos de l'utilisateur utilisera pour créer le bon ticket Kerberos qui permettra au serveur IIS de s'attribuer l'identité de l'utilisateur lorsqu'il transmettra la demande au service suivant.

1voto

Jim Points 113

Est-il important que le service web utilise les informations d'identification de l'utilisateur connecté? Si vous utilisez quelque chose comme MSXML2.ServerXMLHTTPRequest pour appeler le service web, pourriez-vous simplement fournir des informations d'identification dans la méthode .Open pour fournir un ensemble fixe d'informations d'identification au service web?

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X