将“httpContext.User.Identity.Name”与活动目录SamAccountName进行比较。这是正确的方法吗?

时间:2014-12-15 23:46:52

标签: asp.net asp.net-mvc asp.net-mvc-4 ldap httpcontext

我有以下内容: -

  • 我正在使用asp.net mvc-4 Web应用程序。
  • 我正在使用表单身份验证,根据LDAP对用户进行身份验证。

我有一个用于存储SecurityGroup用户的表。表将具有SecurityGroupID +用户SamAccountName。

然后检查登录用户是否在给定的安全组内,我获得登录用户名,如下所示: -

string ADusername = httpContext.User.Identity.Name.Substring(httpContext.User.Identity.Name.IndexOf("\\") + 1);

然后我检查上面的Adusername字符串是否在SecurityGroup表中的任何SamaccountName中。所以在这种情况下,我将SamAccountName视为与“httpContext.User.Identity.Name.Substring(httpContext.User.Identity.Name.IndexOf("\\") + 1);”相同 我测试了这种方法并且运行良好,但不确定这种方法是否会在将来引起问题。所以我在这些问题上需要帮助: -

  1. sameAccountName具有以下格式“FName.LastName”,例如John.Smith。所以,在未来,我们有两个用户名相同的用户。姓。所以SamAccountName会在哪个方面明确识别任何用户?

  2. AD如何填充SamAccountName?例如,在下图中,我认为SAMAccountName是用户登录名(pre-windows 2000)?它是否正确。我可以控制它的值,而不必是Firstname.Lastname? enter image description here

  3. Currenly AD中的所有用户都将“httpContext.User.Identity.Name.Substring(httpContext.User.Identity.Name.IndexOf("\\") + 1)”等于他们的SamAccountName。但这条规则总是如此吗?

  4. SamAccountName是否始终唯一标识用户?如果是,它还会将它们唯一地缩进跨域吗?

  5. 使用用户主体名称而不是samAccountname更好吗?以及string ADusername = httpContext.User.Identity.Name.Substring(httpContext.User.Identity.Name.IndexOf("\\") + 1);在AD中的确切代表是什么?
  6. 由于

1 个答案:

答案 0 :(得分:0)

你使用什么样的ldap?活动目录??如果是这样,那么您可以使用以下类来检查用户是否是组的成员

GroupPrincipal.GetMember

sAMAccountName是一个必须在域中唯一但不在林中的属性。所以John.Smith可以在AD Forest中存在两次。

见这里

sAMAccountName

sAMAccountName和UserPricncipalName不必是sn和givenName。您可以使用任何值。您可以在创建帐户时控制这些值。之后你也可以改变它们。