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

问题描述 投票:1回答:1

我有以下内容:-

  • 我正在处理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是用户登录名(Windows 2000之前的版本)?这个对吗。我可以在哪里控制其值,而不必是Firstname.Lastname?“在此处输入图像描述”

  3. 目前,我们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);在广告中确切代表什么?

谢谢

asp.net asp.net-mvc asp.net-mvc-4 ldap httpcontext
1个回答
0
投票

您可以使用以下方法检查用户是否是组的成员:

GroupPrincipal.GetMembers

sAMAccountName属性在域中必须唯一,但在林中必须唯一。因此John.Smith可以在AD林中多次存在。

请参阅此处

sAMAccountName

sAMAccountName和UserPricncipalName不必为sn和namedName。您可以使用任何值。创建帐户时,您可以控制这些值。以后您也可以更改它们。

© www.soinside.com 2019 - 2024. All rights reserved.