Comment lire l'appartenance à un groupe Active Directory à partir de PHP / IIS en utilisant COM?

StackOverflow https://stackoverflow.com/questions/84641

  •  01-07-2019
  •  | 
  •  

Question

J'ai le code suivant:

$bind = new COM("LDAP://CN=GroupName,OU=Groups,OU=Division,DC=company,DC=local");

Lorsque je l'exécute à partir d'une invite de commande, tout se passe bien. Quand il tourne sous IIS / PHP / ISAPI, il fait barquer.

Fatal error: Uncaught exception 'com_exception' with message 'Failed to create COM object `LDAP://CN=...[cut]...,DC=local':
An operations error occurred. ' in index.php
Stack trace:
  #0 index.php: com->com('LDAP://CN=...')
  #1 {main} thrown

IIS est configuré pour l’authentification Windows (pas d’anonymat, pas de base, pas de résumé) et je me connecte avec le même utilisateur que l’invite de commande. Je ne trouve aucune erreur spécifique dans les fichiers journaux IIS ou dans le journal des événements.

L'objectif principal de cet exercice est d'éviter de conserver les informations d'identification de l'utilisateur dans mon script et de s'appuyer sur l'authentification IIS pour les transmettre au répertoire actif. Je comprends que vous pouvez utiliser LDAP pour accomplir la même chose, mais pour autant que je sache, les informations d'identification ne peuvent pas être transmises.

Cela est peut-être en quelque sorte lié à l'erreur que je reçois lorsque j'essaie de le porter en ASP. Je reçois le message d'erreur 80072020 (que je recherche actuellement).

Les journaux d'événements ne montrent rien qui sorte de l'ordinaire. Pas d'avertissement, pas d'erreur. L’audit complet de la sécurité est activé (réussite et échec de chaque élément de la stratégie de sécurité) et indique les ouvertures de session Windows réussies pour chaque utilisateur que j’authentifie sur la page Web (ce qui est prévu.)

Était-ce utile?

La solution

Puisque vous utilisez l'authentification Windows dans IIS, il se peut que certains événements de sécurité se trouvent dans le journal des événements Windows. Je voudrais vérifier le journal des événements pour les événements de sécurité ainsi que les événements d'application et voir si vous rencontrez des problèmes d'autorisations.

En outre, puisque vous ne communiquez qu'avec AD via LDAP ..., vous pouvez envisager d'utiliser la bibliothèque LDAP native pour PHP plutôt que COM.

Vous devrez probablement activer l'extension dans votre php.ini. Cela vaut la peine de regarder probablement.

Autres conseils

Cela semble fonctionner maintenant.

J'ai activé " Faire confiance à cet ordinateur pour la délégation " pour l'objet ordinateur dans Active Directory. Normalement, IIS ne peut pas vous authentifier, puis vous emprunter un nom d'emprunteur sur le réseau (dans mon cas, à un contrôleur de domaine pour interroger Active Directory) sans l'autorisation de délégation activée.

Vous devez simplement vous assurer qu'il authentifie à l'aide de Kerberos et non de NTLM ou de toute autre authentification d'empreinte digitale, car l'empreinte digitale n'est pas approuvée pour une utilisation en tant que jeton d'emprunt d'identité.

Il a corrigé mes scripts PHP et ASP.

Eh bien, si vous souhaitez utiliser LDAP, laissez-moi vous indiquer le code d'authentification LDAP que nous utilisons pour Maia Mailguard: recherchez la fonction nommée lauth_ldap

Je pense que la version 3 de LDAP est nécessaire, vous devez donc définir ce paramètre pour LDAP. Pour vérifier le mot de passe, nous utilisons la fonction ldap bind pour permettre au serveur LDAP de s’authentifier.

Je ne suis pas un expert AD / COM / IIS, mais il pourrait s'agir d'un problème d'autorisations. Par exemple, l'utilisateur IUSR_nomordinateur n'a pas d'accès applicable dans le répertoire ou vous ne vous engagez pas en tant qu'utilisateur spécifique?

Pour moi, le signal d’alarme est qu’il fonctionne correctement en ligne de commande (avec vos autorisations par exemple) mais échoue sous IIS (par exemple, pas vos autorisations).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top