Tout d’abord, j’aimerais remercier toutes le personnes qui ont pris le temps de m’envoyer leur feedback, commentaires ou questions en rapport avec mon premier post relatif au people picker dans WSS/MOSS.
Maintenant, concentrons-nous sur la 2e partie qui va couvrir les sujets suivants :
- Possibilités additionnelles de filtrage des recherches LDAP
- Configurations détaillées pour chaque scénario Active Directory
- Comment le people picker est lié à l’authentification et à l’importation du profil (exclusivement MOSS)
- Conseils pour optimiser le people picker dans différents scénarios
Une fois de plus, il est important de rappeler que ces posts couvrent le people picker reposant exclusivement l’authentification Windows.
Possibilités additionnelles de filtrage des recherches LDAP
peoplepicker-searchadcustomquery
Ce paramètre permet de spécifier des critères additionnels à la recherche « built-in ». Si vous utilisez cette option, faites-le avec prudence parce que les résultats peuvent être parfois inattendus ou il peut n’y avoir aucun résultat du tout. De plus, si vous visez de multiples forêts ou domaines, le même critère sera appliqué à toutes les cibles ! Il est fortement recommandé de tester et valider votre requête en utilisant LDP.exe, la fonction de query d’ADUC (Console « Active Directory Utilisateurs et Ordinateurs ») ou tout autre client LDAP afin de s’assurer que la recherche se comporte comme espéré.
Dans la pratique, vous pourriez rencontrer le cas suivant: votre organisation utilise également MS Exchange et vous désirez empêcher le people picker d’afficher les personnes cachées de la list d’adresses. Dans ce cas, vous pouvez ajouter la condition additionnelle suivante :
- (!msExchHideFromAddressLists=TRUE)
peoplepicker-onlysearchwithinsitecollection
Pour autant que j’aie pu l’expérimenter, le comportement dans ce cas est assez amusant : cela interrogera AD tel que configuré par l’administrateur et affinera le résultat en le comparant avec la liste des utilisateurs déjà présents dans la collection de sites. Avoir recours à cette requête n’améliorera donc pas vraiment les performances puisque la requête se fera tout de même vis-à-vis d’AD et réalisera les opérations additionnelles par après.
Typiquement, cela serait utilisé dans des collections de sites où l’appartenance de groupes est hautement contrôlée où dans des environnement de hosting.
peoplepicker-activedirectorysearchtimeout
Ce paramètre contrôle l’option d’expiration (timeout) d’une opération de requête envers un AD donné. Cette valeur d’expiration n’est donc pas globale, mais bien spécifiée par cible. Ainsi pour calculer le temps maximum qu’il faudrait au people picker de faire une requête, vous devez multiplier la valeur par le nombre de forêts/domaines spécifiés.
Augmenter le timeout prend évidemment tout son sens dans des scénarios où les contrôleurs de domaine cibles sont connectés via des réseaux avec de faibles bandes passantes/hautes latences OU s’ils sont particulièrement chargés (par exemple, utilisés intensivement par MS Exchange et les clients MS Exchange tels que Outlook).
Setsiteuseraccountdirectorypath
Ce paramètre est primordialement utilisé par les compagnies de hosting qui désirent 1) placer tous les utilisateurs d’un client donné dans un containeur AD déterminé (unité organisationnelle par exemple) 2) mettre une collection de site ou une application Web à disposition de ce client 3) Restreindre la vue du people picker aux seuls utilisateurs présents dans ce containeur.
Le paramètre passé est le distinguished Name de l’unité organisationnelle (par exemple : OU=contoso,ou=customers,dc=litware,dc=local). Ce paramètre est utilisé comme point de départ de la recherche (le « base path »). Si ce paramètre n’est pas défini, le « base path » est toujours la racine de la forêt ou du domaine. Une fois ce paramètre défini, il démarrera au niveau du containeur spécifié.
Puisque le distinguishedName contient le nom du domaine où le containeur existe, cela n’a pas beaucoup de sens de combiner ce paramètre avec la recherche dans de multiple forêts/domaines puisque ce containeur se trouve à un seul endroit spécifique.
Peoplepicker-serviceaccountdirectorypaths
Par vraiment nommé de manière adéquate, ce paramètre a la même fonction que les précédents, mais s’applique exclusivement aux administrateurs de fermes. Toujours applicable essentiellement aux compagnies de hosting, cela empêchera généralement aux administrateurs d’être restreints lorsqu’ils veulent utiliser le people picker.
Configurations détaillées pour chaque scénario Active Directory
- Nous utiliserons toujours le postulat de base suivant:
Le serveur SharePoint qui réalise les requêtes du people picker est toujours membre du domaine « avatar.local »
- L’identité du pool d’application utilisée par l’application web SharePoint est soit « Local System », « Network Service », ou un compte du domaine « avatar.local »
« Simple » relation d’approbation bidirectionnelle (2-way trust)
- Type de relation d’approbation : externe ou forêt
- Direction de la relation d’approbation : bidirectionnelle

Configurations possibles pour interroger « watertribes.local » seulement
- STSADM.exe -o setproperty -pn peoplepicker–searchadforests –pv “forest:watertribes.local”
- STSADM.exe -o setproperty -pn peoplepicker–searchadforests –pv “domain:watertribes.local”
Configurations possibles pour interroger à la fois « watertribes.local » et « avatar.local »
- STSADM.exe -o setproperty -pn peoplepicker–searchadforests –pv “forest:avatar.local;forest:watertribes.local”
- STSADM.exe -o setproperty -pn peoplepicker–searchadforests –pv “domain:avatar.local;domain:watertribes.local"
- STSADM.exe -o setproperty -pn peoplepicker–searchadforests –pv “domain:avatar.local;forest:watertribes.local"
- STSADM.exe -o setproperty -pn peoplepicker–searchadforests –pv “forest:avatar.local;domain:watertribes.local"
« Simple » relation d’approbation unidirectionnelle (1-way trust)
- Type de relation d’approbation : externe ou forêt
- Direction de la relation d’approbation : unidirectionnelle

Ces configurations sont identiques au premier scénario, sauf que pour effectuer une requête dans « watertribes.local », le people picker doit fournir des crédentiels de manière explicite.
Pour interroger « watertribes.local » exclusivement
- STSADM.exe -o setproperty -pn peoplepicker–searchadforests –pv “forest:watertribes.local,WATERTRIBES\KATARA,PASSWORD”
- STSADM.exe -o setproperty -pn peoplepicker–searchadforests –pv “domain:watertribes.local,WATERTRIBES\KATARA,PASSWORD”
Pour interroger à la fois « watertribes.local » et « avatar.local »
- STSADM.exe -o setproperty -pn peoplepicker–searchadforests –pv “forest:avatar.local;forest:watertribes.local,WATERTRIBES\KATARA,PASSWORD”
- STSADM.exe -o setproperty -pn peoplepicker–searchadforests –pv “domain:avatar.local;domain:watertribes.local,WATERTRIBES\KATARA,PASSWORD"
- STSADM.exe -o setproperty -pn peoplepicker–searchadforests –pv “domain:avatar.local;forest:watertribes.local,WATERTRIBES\KATARA,PASSWORD"
- STSADM.exe -o setproperty -pn peoplepicker–searchadforests –pv “forest:avatar.local;domain:watertribes.local,WATERTRIBES\KATARA,PASSWORD"
Multiples Relations d’approbation bidirectionnelles (2-way trusts)
- Type de relation d’approbation : externe ou forêt
- Direction de la relation d’approbation : bidirectionnelle

Les configurations possibles sont presqu’identiques au premier scénario à ceci près que “firenation.local” doit être ajouté à la liste des forêts/domaines. Exemples:
- STSADM.exe -o setproperty -pn peoplepicker–searchadforests –pv “forest:watertribes.local,WATERTRIBES\KATARA,PASSWORD;forest:firenation.local,FIRENATION\ZUKO,PASSWORD”
- STSADM.exe -o setproperty -pn peoplepicker–searchadforests –pv “forest:avatar.local;forest:watertribes.local,WATERTRIBES\KATARA,PASSWORD;forest:firenation.local,FIRENATION\ZUKO,PASSWORD”
Note: certaines personnes diront qu’il n’est pas sage d’approuver Firenation mais puisque Zuko est le nouveau fire lord, cela ne devrait plus être un problème.
Multiples Relations d’approbation unidirectionnelles (1-way trusts)
- Type de relation d’approbation : externe ou forêt
- Direction de la relation d’approbation : unidirectionnelle

Cette configuration est la même que la précédente sauf que des crédentiels explicites doivent être fournis pour chaque forêt ou domaine approuvé à interroger :
- STSADM.exe -o setproperty -pn peoplepicker–searchadforests –pv “forest:watertribes.local,forest:firenation.local”
- STSADM.exe -o setproperty -pn peoplepicker–searchadforests –pv “forest:avatar.local;forest:watertribes.local;forest:firenation.local”
Une fois de plus, suivant le type de requête que vous désirez réaliser (LDAP ou GC), spécifiez domain ou forest comme préfixe.
Relation d’approbation bidirectionnelle entre forêts (2-way trust)
- Type de relation d’approbation : forêt. Par transitivité, North sera approuvé également
- Direction de la relation d’approbation : bidirectionnelle

Dans ce cas particulier, disons que vous désirez interroger à la fois « watertribes.local » et son domaine enfant « North.watertribes.local”. La méthode la plus facile et efficace de procéder est d’utiliser le préfixe forest : cela forcera le people picker à utiliser le service de catalogue global pour interroger la forêt “watertribe.local” en incluant évidemment le domaine enfant, mais dans ce cas une seule connexion et une seule requête sont suffisantes.
- STSADM.exe -o setproperty -pn peoplepicker–searchadforests –pv “forest:watertribes.local”
Enfin, si la relation d’approbation avait été unidirectionnelle, il suffit simplement fournir d’autres crédentiels :
- STSADM.exe -o setproperty -pn peoplepicker–searchadforests –pv “forest:watertribes.local,WATERTRIBES\KATARA,PASSWORD”
Note : si vous utilisez le préfixe domain, la requête sera limitée au domaine « watertribes.local »
Comment le people picker est lié à l’authentification et à l’importation du profil (exclusivement MOSS)
J’ai souvent rencontré des personnes qui étaient convaincues que le people picker était impacté par le composant d’importation du profil (Profile Import) présent dans MOSS SSP. Ce n’est pas le cas.
Alors que le people picker est utilisé pour définir des permissions ou d’autres éléments en utilisant les security principals AD (utilisateurs et groupes) et les enregistrer dans des content databases , l’importation du profil est « seulement » responsable de mettre à jour les propriétés de ces utilisateurs ou groupes quand ils existent déjà dans les content databases.
L’importation du profil ne « touchera » pas aux informations relatives à la sécurité, ni ne changera la manière dont le people picker se comporte en interrogeant AD.
D’un autre côté, le people picker est directement lié à l’authentification ou devrais-je dire au mécanisme d’autorisation (pour être exact) dans WSS/MOSS parce qu’une fois l’utilisateur authentifié par Windows/IIS, SharePoint vérifiera alors si l’utilisateur est autorisé à accéder à la page demandée. L’information utilisée dans ce but étant le token de l’utilisateur (SID, appartenance aux groupes, …).
Une autre chose importante est le lien qui existe entre le type de relation d’approbation et le protocole d’authentification utilisé par Windows. Afin d’utiliser Kerberos, une relation d’approbation entre forêts doit être mise en place. D’un autre côté, une relation d’approbation « externe » (basée sur les domaines) impliquera toujours l’authentification NTLM.
Conseils pour optimiser le people picker dans différents scénarios
Du point de vue de SharePoint exclusivement, il n’y a que peu de chose à faire pour optimiser le people picker
- Réduire autant que possible le nombre de forêts et domaines à interroger. Si vous envisagez d’interroger plusieurs domaines de la meme forêt, considérez plutôt de viser la forêt dans son entièreté via une requête unique
- N’utilisez pas de critère additionnel (customadsearchfilter) ou de processus additionel (onlysearchwithinsitecollection) si possible
- Essayez de ne pas mélanger de requêtes contre des AD très réactifs et d’autres moins qui le sont moins (pas evident, je sais) parce que les AD les moins réactifs impacteront le processus de requête dans son entièreté
Avec l’aide de l’administrateur AD, vous pouvez améliorer les performances et la disponibilité en:
- Plaçant un contrôleur de domaine cible « à proximité » du serveur SharePoint et appliquant la configuration de la topologie AD appropriée. Idéalement, le serveur SharePoint et le contrôleur de domaine cible doivent « se voir » en tant que membre du même site Active Directory , même s’ils n’appartiennent pas à la même forêt AD (ce qui signifie de nommer les sites de manière identique dans les forêts resource et utilisateurs). De manière générale, une faible latence importe plus qu’une large bande passante dans la perception de la réactivité.
- S’assurant que les contrôleurs de domaine visés sont disponibles et réactifs (pas trop chargés par d’autres opérations orientées LDAP ou proche de la pleine capacité en général).
- C’est un detail, mais puisque la resolution DNS est utilisée pour atteindre les DCs, s’assurer de sa bonne configuration/efficacité, pourquoi pas en utilisant la cache (temps idéalement pas trop court mais pas trop long non plus, en cas de failover vers un autre DC). Bien sûr le serveur SharePoint DOIT être capable de résoudre tous les domaines AD de manière appropriée. Utilisez l’ordre de recherche des suffixes à bon escient et seulement si nécessaire.
Note: les recommandations ci-dessus seront aussi bénéfiques aux mécanismes d’authentification utilisés par Windows/IIS
Informations Additionnelles
Au vu du feedback important que j’ai reçu de la part de personnes ne faisant pas partie du monde infrastructure (développeurs, …) ou ayant des competences limitées avec AD, je planifie un 3e post détaillé relatif au dépannage.
Je couvrirai également les challenges de l’utilisation de l’authentification intégrée de Windows dans une configuration IIS/Sharepoint complexe, comme par exemple lors d’une recherche fédérée inter-forêt tout en s’assurant que les résultats de la recherche resteront sécurisés par limitation (security trimming) …
Marc
(traduit de l’Anglais par Anthony)