我的代码与旧的Active Directory服务器一样,现在我已将其指向新的Windows Server 2008 AD系统。现在,组名称将返回SID而不是名称。我不太了解AD方面是否有办法让新的AD服务器像旧的AD服务器一样工作。
我的代码基于Codeplex上的BlogEngine.NET的Active Directory角色提供程序。
我相信这是我需要调整的界限。
IdentityReferenceCollection irc = ExpandTokenGroups(user).Translate(typeof(NTAccount));
现在,ExpandTokenGroups返回SID值,而Translate已将其更改为人类可读的组名。我想知道我是否应该传递与NTAccount不同的类型来翻译。
如何获取群组名称?
答案 0 :(得分:0)
答案 1 :(得分:0)
这是我在C#中的解决方案,它不是最佳的,但它正在发挥作用。
public override string[] GetRolesForUser(string username)
{
// list to store names of roles
List<String> roles = new List<string>();
// get the user directory entry
DirectoryEntry user = getUser(username);
foreach (String prop in user.Properties["memberOf"])
{
if (prop.IndexOf("CN=") == 0 && prop.IndexOf(",") != -1)
{
var groupName = prop.Substring("CN=".Length, prop.IndexOf(",") - "CN=".Length);
roles.Add(groupName);
}
}
return roles.ToArray();
}