我使用什么Active Directory字段来唯一标识用户?

时间:2009-12-15 23:49:42

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

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

Guid怎么样? Guid似乎是明显的选择,但我对此一无所知。它为什么可以为空?这个值会改变吗?它用于什么?

更新

根据SID vs. GUID ...

  

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

如果将用户移动到新域,SID实际上会更改,GUID将保留 不变。除非您打算对NT4 AD服务器进行身份验证,否则我认为GUID是最佳选择。

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

4 个答案:

答案 0 :(得分:7)

根据SID vs. GUID ...

  

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

话虽如此,我决定选择GUID。如果将用户移动到新域,SID实际上会发生变化,GUID将保持不变。只要您不打算针对NT4 AD服务器运行应用程序,就可以使用GUID了。

答案 1 :(得分:2)

您可能想要使用SID - 这是操作系统本身在大多数情况下使用的内容。 SID在域或工作组中也是唯一的。

单独使用用户名的问题是它可以更改,而SID是固定的。

答案 2 :(得分:-1)

如果您在Windows身份验证中使用ASP.NET MVC(或Webforms),为什么不使用从此属性获取的用户名:

HttpContext.Current.User.Identity.Name

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

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

答案 3 :(得分:-2)

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