无法获取用户的域成员组列表

时间:2018-10-29 07:44:03

标签: c# active-directory windows-server-2008-r2 windows-server-2012-r2

我正在使用下面的C#代码检查用户是否属于必需的域成员组。

传递的用户名是3个成员组的一部分,但是代码将返回第一个域组成员名并从for循环中退出。请帮助我为用户获取域组的完整列表。

<html>
<head>
  <title>Slots</title>
</head>

<body>
  <h1>Test your luck! Click the SPIN button</h1>
  <div>
    <button value="Spin" onclick="spinslots();"> SPIN </button>
  </div>
  <div>
    <div class="SlotDiv" id="div_1">
      <img id="slot_1" src="images/lemon.jpg" />
    </div>
    <div class="SlotDiv" id="div_2">
      <img id="slot_2" src="images/cherry.jpg" />
    </div>
    <div class="SlotDiv" id="div_3">
      <img id="slot_3" src="images/bar.jpg" />
    </div>
  </div>

  <p>Credits: <span class="OutputBox" type="numeric" id="Credits" size="10">20</span></p>
    
  </body>
</html>

3 个答案:

答案 0 :(得分:0)

如果我弄错了,请告诉我。 我只能看到一个目的,要退还布尔? 顺便说一句,即使不是那样,请尝试删除break;

bool bReturn = false;

string sDomainName = System.Environment.UserDomainName;
using (PrincipalContext oContext = new     PrincipalContext(ContextType.Domain, sDomainName))
{
if (oContext.ValidateCredentials(sUserName, sPassword))
{
    using (PrincipalSearcher oSearcher = new PrincipalSearcher(new UserPrincipal(oContext)))
    {
        oSearcher.QueryFilter.SamAccountName = sUserName;
        Principal oPrincipal = oSearcher.FindOne();
        foreach (Principal oPrin in oPrincipal.GetGroups())
        {
            if (oPrin.Name.Trim().ToString().Equals(sGroupName))
            {
                //your stuff here (assign vars, values etc)
                bReturn = true; // <-- 
            }
        }
    }
}

因为根据您使用的逻辑,如果满足一个条件,它将停止循环。

答案 1 :(得分:0)

使用IsMemberOf方法来代替循环:

bReturn = oPrincipal.IsMemberOf(oContext, IdentityType.Name, sGroupName);

这将可能为您工作。但是请记住,只有在用户的memberOf属性中列出了该组时,此方法(和您的循环方法)才有效。如果:

  1. 您的AD林中有多个域,并且
  2. 您正在使用的组是“全局”或“本地域”,并且
  3. 该组与用户不在同一个域中

然后它将不起作用。

我在我在自己的网站上写过的一篇文章中谈到了这一点:Find out if one user is a member of a group

答案 2 :(得分:0)

C#代码无法获取特权问题的AD成员详细信息。 我已经使用net group "<GroupName>"来获取用户列表作为组的一部分,然后在列表中检查了所需的用户。

验证用户是必需组的成员是另一种选择。