Obtenir des informations utilisateur Active Directory avec l'authentification Windows dans MVC 4
Je suis en train de travailler sur un MVC 4 application intranet et suis à l'aide de l'authentification Windows. Je voudrais ajouter à l'objet utilisateur que la méthode d'authentification utilise (@User) et d'obtenir des données à partir d'active directory (comme l'e-mail, numéro de téléphone, etc).
Je sais que je peux créer un personnalisé Autoriser l'attribut et l'ajouter au contrôleur que tous mes autres contrôleurs hériter de la, mais je ne sais pas si c'est la bonne méthode pour faire ce que je veux.
Mon objectif final est simple, je veux @User de l'objet pour avoir des propriétés supplémentaires qui sont peuplées par Active Directory. Merci pour toute aide que vous pouvez offrir.
source d'informationauteur Mike
Vous devez vous connecter pour publier un commentaire.
J'étais juste sur le point d'ajouter à ma propre question à StackOverflow avec ma solution pour aider les autres avec ce problème, quand j'ai vu votre question. Il semble que ce serait quelque chose de très commun, mais l'information sur la façon de le faire seulement s'étale entre sources multiples et difficiles à dépister. Il n'y a pas une seule ressource, donc j'espère que cela va vous aider, vous et les autres.
La meilleure façon de le faire est d'utiliser un UserPrincipal extension. Fondamentalement, vous êtes-classement
UserPrincipal
deSystem.DirectoryServices.AccountManagement
et en ajoutant vos propres propriétés supplémentaires. Cette option est activée via leExtensionGet
etExtensionSet
(un peu magique) méthodes.Les deux attributs de la classe doivent être personnalisés à votre instance AD. La valeur de
DirectoryRdnPrefix
doit être la RDN (relative distinguished name) dans l'ANNONCE, alors que la valeur pourDirectoryObjectClass
doit être l'objet d'annuaire de type nom dans la publicité pour une userObject classe. Pour un Domaine AD Services d'installation, ils doivent être utilisés dans le code présenté ci-dessus, mais pour l'église de l'installation, ils pourrait être différentes. J'ai ajouté deux nouvelles propriétés que mon organisation utilise, "titre" et "département". De cela, vous pouvez vous faire une idée de la façon d'ajouter toute autre propriété que vous aimez: en gros, il vous suffit de créer une propriété en utilisant le modèle que j'ai fourni ici. La propriété peut être n'importe quel nom que vous voulez, mais la chaîne de valeur passée àDirectoryProperty
et à l'intérieur du bloc de code doit correspondre à un nom de propriété de AD. Avec cela en place, vous pouvez utiliserPrincipalContext
avec votre sous-classe au lieu deUserPrincipal
pour obtenir le retour d'un utilisateur de l'objet avec les propriétés que vous avez besoin ajoutée.Et accéder à votre propriété comme les autres sur le
UserPrincipal
exemple:Si vous n'êtes pas familier avec
System.DirectoryServices.AccountManagement.UserPrincipal
il y a quelques propriétés de l'utilisateur cuit:GivenName
Surname
DisplayName
etc. En particulier de votre cas, puisque vous avez mentionné téléphone et e-mail précisément, il y aVoiceTelephoneNumber
etEmailAddress
. Vous pouvez voir la liste complète dans le MSDN docs. Si tous vous avez besoin est intégré dans l'information, vous n'avez pas besoin de s'étendreUserPrincipal
comme je l'ai montré ci-dessus. Vous faites juste:Mais 9 fois sur 10, le haut-ins ne sera pas suffisant, il est donc bon de savoir comment obtenir le reste facilement.
Enfin, je ne voulais pas avoir à ajouter
@using
lignes à tout point de vue qui l'utilise, donc je suis allé de l'avant et a ajouté les espaces de noms pour monViews
du dossier web.config. Cette partie est importante, il doit être ajouté à laViews
du dossier web.config, pas du projet (et de chaque Zone individuelle deViews
dossier si vous êtes en utilisant des Zones).Ces n'ont pas été reconnus. Avez-vous venez de créer un contrôle dans votre mvc 4 rasoir projet?
Je ne peux pas trouver ou ajouter la référence
System.DirectoryServices.AccountManagement