我正在尝试使用活动目录成员而不是 SQL,但在线可用的文档非常有限。我设法将我的应用程序连接到域控制器没有任何问题,但是当您使用“Context.User.Identity.Name”时,它会出现 DOMAIN\User。我想基本上向下钻取并获取诸如全名,电子邮件地址等信息。
我只需要一个有用的链接,而我所做的搜索似乎没有让我到任何地方!
非常感谢
我正在尝试使用活动目录成员而不是 SQL,但在线可用的文档非常有限。我设法将我的应用程序连接到域控制器没有任何问题,但是当您使用“Context.User.Identity.Name”时,它会出现 DOMAIN\User。我想基本上向下钻取并获取诸如全名,电子邮件地址等信息。
我只需要一个有用的链接,而我所做的搜索似乎没有让我到任何地方!
非常感谢
你试过这个文档吗?
能够帮助?
这应该会给您一些线索: http: //msdn.microsoft.com/en-us/library/ms973834.aspx ,这里是您可能希望在搜索结果中使用的 LDAP 属性列表:http://www.computerperformance.co.uk/Logon/LDAP_attributes_active_directory.htm
如果您正在使用 Active Directory,那么您可能正在使用 Windows 身份验证。如果是这样,您需要做的就是:
参考System.DirectoryServices.AccountManagement
在代码中(可能是控制器操作或模型构造函数)
// 将您的域建立为用户查找的上下文 var principalContext = new PrincipalContext(ContextType.Domain, "domainName");
// 获取当前用户的 UserPrincipal 对象 var userPrincipal.FindByIdentity(principalContext, @User.Identity.Name)
// 示例 var email = userPrincipal.EmailAddress;
这是有效的,因为 Windows 身份验证意味着User.Identity
当前HttpContext
是 a WindowsIdentity
,因此它的Name
属性可用于搜索 AD。
您不仅限于查找当前用户。您可以使用FindByIdentity()
搜索任何传递的值,并且此方法存在于其他主体(例如 GroupPrincipal)上。您还可以指定您希望按其他类型(例如 SID)而不是名称进行搜索。
享受!