【问题标题】:MVC Active Directory MembershipMVC 活动目录成员资格
【发布时间】:2011-01-12 16:48:50
【问题描述】:

我正在尝试使用活动目录成员而不是 SQL,但在线可用的文档非常有限。我设法将我的应用程序连接到域控制器没有任何问题,但是当您使用“Context.User.Identity.Name”时,它会出现 DOMAIN\User。我想基本上下钻并获取诸如全名,电子邮件地址等信息。

我只需要一个有用的链接,我所做的搜索似乎没有找到任何地方!

非常感谢

【问题讨论】:

    标签: c# model-view-controller activedirectorymembership


    【解决方案1】:

    这应该会给你一点线索:http://msdn.microsoft.com/en-us/library/ms973834.aspx 以下是您可能希望在搜索结果中使用的 LDAP 属性列表:http://www.computerperformance.co.uk/Logon/LDAP_attributes_active_directory.htm

    【讨论】:

    • 我真的需要创建一个到 DC 的新连接来获取我想要的信息吗?我曾希望 web.config 文件中的信息就足够了……你能确认一下吗?我需要创建与 DC 的新连接以获取我需要的信息。
    • 如果你想从 AD 获取额外的属性,你需要这样做。这就是我在开发经过身份验证与 AD 的 Intranet Web 应用程序时的做法。我不确定是否还有其他方法。也许其他人可能知道。
    • 我发现了一些使用 system.DirectoryServices.AccountManagement 类的东西(耶) - 你必须传递一个用户名,你可以收集你想要的任何参数:使用 (var user = UserPrincipal.FindByIdentity(context , "用户名")) { return user.DisplayName; } - 这是一个额外的工作,但至少它有效!
    • 酷,我没用过那个。他们必须添加它们,因为在我不得不用 AD 做任何事情之后:)。感谢分享。
    【解决方案2】:
    【解决方案3】:

    如果您正在使用 Active Directory,那么您可能正在使用 Windows 身份验证。如果是这样,您需要做的就是:

    1. 参考System.DirectoryServices.AccountManagement

    2. 在代码中(可能是控制器操作或模型构造函数)

      // 将您的域建立为用户查找的上下文 var principalContext = new PrincipalContext(ContextType.Domain, "domainName");

      //获取当前用户的UserPrincipal对象 var userPrincipal.FindByIdentity(principalContext, @User.Identity.Name)

      // 示例 var email = userPrincipal.EmailAddress;

    注意:

    • 这是可行的,因为 Windows 身份验证意味着当前 HttpContext 上的 User.IdentityWindowsIdentity,因此其 Name 属性可用于搜索 AD。

    • 您不仅限于查找当前用户。您可以使用FindByIdentity() 搜索任何传递的值,并且此方法存在于其他主体(例如 GroupPrincipal)上。您还可以指定您希望按其他类型(例如 SID)而不是名称进行搜索。

    享受吧!

    【讨论】:

      猜你喜欢
      • 2012-03-02
      • 2015-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-27
      • 1970-01-01
      相关资源
      最近更新 更多