【问题标题】:Active Directory Membership Provider - how to expand on this?Active Directory Membership Provider - 如何对此进行扩展?
【发布时间】:2011-02-18 23:07:04
【问题描述】:

我正在努力通过 AD Membership Provider 启动和运行 MVC 应用程序,但我在解决这个问题时遇到了一些问题。当我以 foo@my.domain.com + 密码登录时,我有一个基本配置设置和工作。

   <connectionStrings>
      <add name="MyConnString" connectionString="LDAP://domaincontroller/OU=Product Users,DC=my,DC=domain,DC=com" />
   </connectionStrings>

  <membership defaultProvider="MyProvider">
     <providers>
        <clear />
        <add name="MyProvider" connectionStringName="MyConnString"
             connectionUsername="my.domain.com\service_account"
             connectionPassword="biguglypassword"
             type="System.Web.Security.ActiveDirectoryMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
     </providers>
  </membership>

但是,我想做一些其他的事情,但我不知道该怎么做。

  1. 无需输入域即可登录(即“@my.domain.com”)。我意识到这只有在我将自己限制在一个领域时才有效——这很好。
  2. 在单个 OU 中组织最多 N 个不同 OU 中的用户。从我当前的连接字符串可以看出,我正在验证我的Product Users OU 中的用户。我想为这个 OU 中的各个公司创建 OU,并将用户放入这些 OU。如何跨所有这些不同的 OU 进行身份验证?
  3. 我试图弄清楚 Active Directory 成员资格提供程序如何与配置文件和角色提供程序相关联。是否也有这些的 AD 版本,或者我是否坚持使用 SQL、本土开发或查找其他人编写的代码?

非常感谢!!

【问题讨论】:

    标签: asp.net-mvc visual-studio-2010 active-directory asp.net-membership


    【解决方案1】:

    针对第 3 点:

    不久前我回答了一个类似的问题:"How can i implement a role-hierarchy in an asp.net mvc app using activedirectorymembershipprovider"

    WindowsTokenRoleProvider 应该为您提供 AD 中用户角色的详细信息 - 它是一个只读提供程序,仅提供 IsUserInRoleGetRolesForUser 的方法,但可能足以满足您的需求。

    【讨论】:

    • 嗯,那个 codeplex 项目似乎已被废弃,并且没有可供下载的版本。可能有一些有用的代码,但我不确定我是否想盲目地采用它并在生产中使用它。 codeproject.com 选项看起来更可行。如果可能的话,我想我的答案是“让我们尽量不要为此使用 AD”。或者如果我这样做了,那么将它用于一个简单的场景,不要太复杂。谢谢!
    • 就我个人而言,我更喜欢它作为源代码,而不是我可以“盲目地在生产中使用”的版本;)至少这样我实际上可能会快速浏览一下代码,而使用 dll 我可能不会打开反射器来查看里面发生了什么,除非我不知道如何使用它:(
    • 我知道你来自哪里,但我不想自制我们使用的所有东西。能够购买维护的产品并依赖它们当然很好。此外,我只是不确定提升并学习我需要学习的内容以确定该来源是否良好对我来说有多大价值。毕竟,到目前为止,AD 不是我的专长,学习它也不是我有过的最激动人心的想法……
    • 我完全同意购买而不是重写选项 - 是的,通常最好让其他人了解细节的本质:)也就是说,这可能并不令人兴奋,但环顾四周,拥有它可能是一项宝贵的技能;)
    • 声称 MS 没有提供使用 AD 的角色提供者是不正确的。他们这样做了,它被称为 WindowsTokenRoleProvider msdn.microsoft.com/en-us/library/…
    【解决方案2】:

    对于第 1 项,我找到了答案。我需要添加attributeMapUsername="sAMAccountName"

        <add name="MyProvider" connectionStringName="MyConnString"
             attributeMapUsername="sAMAccountName"
             connectionUsername="my.domain.com\service_account"
             connectionPassword="biguglypassword"
             type="System.Web.Security.ActiveDirectoryMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    

    【讨论】:

      【解决方案3】:

      针对第 2 点:

      我遇到了同样的问题,所以我所做的是从连接字符串中删除 OU。 像这样的:

      <add name="MyConnString" connectionString="LDAP://domaincontroller/DC=my,DC=domain,DC=com" />
      

      现在,我可以跨所有这些不同的 OU 对用户进行身份验证。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多