【问题标题】:What Active Directory field do I use to uniquely identify a user?我使用什么 Active Directory 字段来唯一标识用户?
【发布时间】:2010-12-27 01:08:34
【问题描述】:

我有一个通过 AD 进行身份验证的 Asp.net MVC 项目。我想将审计信息存储在当前登录用户的表中。我应该在数据库中存储什么?我目前使用SamAccountName 作为我的会员和角色提供者。我应该使用这个吗?我应该使用更详细和现代的UserPrincipalName 吗?如果我们最终使用多个域怎么办?

Guid 呢? Guid 似乎是显而易见的选择,但我对此一无所知。为什么它可以为空?这个值会改变吗?它是干什么用的?

更新

根据SID vs. GUID...

完全使用 SID 而不是 GUID 的原因是为了向后兼容。 Windows NT 使用 SID 来识别资源 ACL 中的用户和组。

如果您将用户移动到新域,SID 实际上会发生变化,但 GUID 将保持不变 持续的。在我看来,除非您打算针对 NT4 AD 服务器进行身份验证,否则 GUID 是可行的方法。

我不知道该怎么做,因为我在 2 天内无法接受自己的答案。最深入的解释胜出?

【问题讨论】:

  • 仅供参考。 .NET 4.5 的文档说“当 ContextType 属性设置为 Machine 时,此属性将始终返回 null”

标签: asp.net asp.net-mvc active-directory asp.net-membership


【解决方案1】:

samAccountName 是用户用于登录的用户名。您也可以通过预先添加域来获得更“完整”的信息,但没有理由不使用明显的用户名字段。

【讨论】:

  • 不能更改用户名吗?例如,如果一个女人结婚了,她的姓氏发生了变化,这也导致了用户名的变化?
  • 将 samAccountname 更改为其他名称...新登录仍然是唯一的,因此它仍然唯一标识用户。
【解决方案2】:

您可能希望使用 SID——在大多数情况下,这就是操作系统本身使用的。 SID 在域或工作组中也是唯一的。

仅用户名的问题在于它可以更改,而 SID 是固定的。

【讨论】:

  • 此外,代表 SID 的类是 System.Security.Principal.SecurityIdentifier,而不是问题和其他一些 cmets 建议的 System.Guid。
  • @Aaron Principal 拥有 Guid 和 SID。
  • Principal 对象中有一个单独的字段,叫做“Guid”;但是,不需要将 GUID 与用户关联,因此该字段可以为空。
  • 根据technet.microsoft.com/en-us/library/cc961625.aspx SID 将在您切换域时更改。 GUID 将保持不变。看起来 Guid 是这里最好的解决方案。
  • 您可以根据需要使用objectGUID 属性。 SID 和 GUID 都不是“最好的”,它们只是不同而已。如果您存储的信息与安全相关,请使用 SID。如果它与身份相关,请使用 GUID。如果两者都是,请使用 GUID 但存储 SID,以便更轻松地查询 Active Directory 并与其他 AD 库和启用 AD 的应用程序通信。
【解决方案3】:

根据SID vs. GUID...

完全使用 SID 而不是 GUID 的原因是为了向后兼容。 Windows NT 使用 SID 来识别资源 ACL 中的用户和组。

话虽如此,我决定使用 GUID。如果将用户移动到新域,SID 实际上会发生变化,但 GUID 将保持不变。只要您不打算在 NT4 AD 服务器上运行您的应用程序,GUID 就是要走的路。

【讨论】:

    【解决方案4】:

    如果您使用带有 Windows 身份验证的 ASP.NET MVC(或 Webforms),为什么不直接使用从该属性中获得的用户名:

    HttpContext.Current.User.Identity.Name
    

    这将返回用户的域/用户名。我曾开发过用于审计目的的企业网络应用程序。我很想知道您是否认为这对于您的目的来说不够独特。

    此外,我不确定您为什么要存储用户的 SID 或 GUID,因为在查看审核日志时,与域/用户相比,它很难阅读。

    【讨论】:

    • 用户名可以更改。我目前也在使用 SamAccountName,因此 Identity.Name 中没有域信息,它只是一个用户名。我主要关心的是未来的扩展。
    • 用户名更改有多常见(请注意,不是显示名称,我们是在谈论帐户名称)?我已经看到这被用于在拥有 100K+ 用户帐户的组织中进行审核而没有投诉。你确定你没有想太多这个问题吗?
    • 我还看到了用户帐户名称确实发生变化的情况:员工离开公司并返回时。然而,在这种情况下,即使 SID 也会更改,因为它被视为一个新帐户,即使它实际上是同一个人。如果您想真正确保是同一个人,则需要使用全球公认的唯一标识符,例如 SSN。
    • 虽然我明白你的意思,但这个 100k+ 组织是否制定了政策来确保不会出现用户名冲突?比如从不允许相同的用户名?如果员工离开时使用了一个共同的名字,比如说“sjohnson”,他们的帐户就会被删除。然后一位新员工上任并获得用户名 sjohnson。这会在应用程序中造成一些关于谁做了什么的混淆。虽然我知道这种情况非常罕见,尤其是在较小的组织中,但它仍然可能发生。我宁愿积极主动。
    • 每次有人结婚或离婚时用户名都会改变,除非组织实施的用户名格式不包含用户名的任何部分,例如employeeid 等。对于超过 1000 人的组织来说,更改用户名是一件非常头疼的事情。我知道一个 10K 组织有一个专门负责处理名称更改的安全管理员。
    猜你喜欢
    • 1970-01-01
    • 2020-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多