【问题标题】:Authenticating with samAccountName in UPN format使用 UPN 格式的 samAccountName 进行身份验证
【发布时间】:2012-07-17 16:49:33
【问题描述】:

在添加支持通过 Active Directory 使用用户的 samAccountName 对用户进行身份验证时,我不小心使用 UPN 格式的 samAccountName 进行了身份验证。

示例:用户的 UPN 为 test@mycorp.com samAccountNameanotherTest 请注意,samAccountName 和 UPN 完全不同。 当我使用用户名anotherTest@mycorp.com执行ldap绑定操作时,认证竟然成功了。

为什么会成功?绑定UPN格式的samAccountName是否有效?

谢谢

【问题讨论】:

    标签: active-directory ldap


    【解决方案1】:

    好问题。情况就是这样,我从未试图找到答案。我在网上找不到文档,但在另一个论坛中只有这个 discussion

    听起来无论您在userPrincipalName 属性中设置什么值,Active Directory 中都有一个默认 UPN(但不是 ADAM)。默认 UPN 格式为 <samAccountName>@<domainName>

    您还应该注意userPrincipalName 属性不是强制属性。这意味着您始终可以创建一个不为 userPrincipalName 属性分配值的 AD 用户对象。如果您使用 Active Directory 用户和计算机管理单元创建它,您不会意识到这一点,因为 UI 本身会强制您始终键入值。但是,如果您使用 ADSI 以编程方式创建 AD 对象,则可以这样做。

    如果您的年龄足够大,对 NT4 系统有一些经验,您应该知道当时只有 samAccountName,但根本没有 UPN。正因为如此,当您从 NT4 迁移到 Windows 2003 时,you will create a bunch of users with no UPN set to it

    我怀疑这是让默认 UPN 派生自 samAccountName 的动机。

    请注意,samAccountName 是 AD 用户对象的必需属性。所以,这个属性不可能是空的。

    【讨论】:

      【解决方案2】:

      根据MSDN documentation 中提供的信息,samAccountName@domainName 允许成功绑定似乎很正常:

      对象的 UPN 是:

      • 对象的 userPrincipalName 属性的值,或
      • 仅适用于 AD DS:对象的 sAMAccountName 属性的值,后跟“@”符号,后跟以下任一:
        • 与对象在同一林中的域的 DNS 名称
      • 或配置 NCreplica 中分区容器的 uPNSuffixes 属性中的值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-17
        • 1970-01-01
        相关资源
        最近更新 更多