如何创建自定义 Active Directory 权限和组,以便我可以根据此验证用户?
How do I create a custom Active Directory permission and group so that I can verify users against this?
我查看了许多搜索结果,但我正在努力寻找一种方法来以编程方式(使用 C#)在 Active Directory 中创建自定义权限和自定义组。
我有一个应用程序需要大约50个单独的权限,例如:可以加密数据,可以解密数据,可以导出私钥,可以删除密钥对等。这些权限将分配给一个自定义组.例如,该组可能被称为:标准用户、安全管理员等
用户将被分配到这些组中的一个或多个。我需要通过 Active Directory 管理所有这些。正在编写的软件是用 C# 编写的。用户将在 Active Directory 中。
当要执行应用程序上的功能时,软件将检查用户是否具有特定权限。如果用户没有权限,则他们将需要输入覆盖。此覆盖只是提示输入具有相关权限的另一个用户的凭据。
我想强调的是,这需要通过 Active Directory 进行管理,因为该软件 运行 在域上,权限将由域管理员管理。
因此,我认为 ASP.Net 角色功能还不够?另外,我不确定Azure AD是否与Windows AD相同。
对于 .NET assembly/namespace 将提供以下功能的任何指导,我将不胜感激:
- 创建权限
- 创建群组
- 为组分配权限
- 将用户分配到组
- 从组中删除用户
- 从组中删除权限
我需要以编程方式执行此操作,因为该软件将有一个安装程序,并且将负责在安装期间添加特定于应用程序的自定义权限和组(如果它们尚不存在)。
我可能处理这个问题有误,所以我愿意接受其他方面的建议。只要我能做到以上那点就好了!
谢谢!
据我了解,
在这里你可以试试下面的代码
试一次
1) 创建群组
PrincipalContext principalContext =
new PrincipalContext(ContextType.Domain, LDAPDomain, LDAPContainer,
LDAPAdmin, LDAPPassword);
GroupPrincipal group = GroupPrincipal.FindByIdentity(principalContext, "groupName");
if (group == null)
{
GroupPrincipal groupPrincipal = new GroupPrincipal(principalContext);
groupPrincipal.Name = "groupName";
groupPrincipal.SamAccountName = "samAccountName";
groupPrincipal.UserPrincipalName = "userPrincipleName";
groupPrincipal.GroupScope = GroupScope.Global;
groupPrincipal.Description = "groupNameDescription";
groupPrincipal.DisplayName = "groupNameDisplayName";
groupPrincipal.Save();
}
2) 将用户添加到组
GroupPrincipal group = GroupPrincipal.FindByIdentity(principalContext, "groupName");
UserPrincipal user = UserPrincipal.FindByIdentity(principalContext, "userName");
bool isUserAdded = false;
if (user != null & group != null)
{
if (user.IsMemberOf(group))
{
//Do Code
}
else
{
group.Members.Add(user);
group.Save();
isUserAdded = user.IsMemberOf(group);
}
}
if (isUserAdded)
{
//Do Code
}
3) 从组中删除用户
GroupPrincipal group = GroupPrincipal.FindByIdentity(principalContext, "groupName");
UserPrincipal user = UserPrincipal.FindByIdentity(principalContext, "userName");
bool isUserRemoved = false;
if (user != null & group != null)
{
if (user.IsMemberOf(group))
{
group.Members.Remove(user);
group.Save();
isUserRemoved = user.IsMemberOf(group);
}
else
{
//Do Code
}
}
if (!isUserRemoved)
{
//Do Code
}
4) 添加或删除组的访问规则(权限)
在我这边,我不清楚你的逻辑或实现是什么,
但在这里我试图给出一个解决方案来添加或删除组的访问规则
//DirectoryEntry for OU Level
DirectoryEntry directoryEntry = new DirectoryEntry("LDAP://OU=MYOU,DC=MYDC,DC=COM");
NTAccount account = new NTAccount("MYDC", "groupName");
ActiveDirectoryAccessRule ruleRead = new ActiveDirectoryAccessRule(
account,
ActiveDirectoryRights.ReadProperty,
AccessControlType.Allow,
ActiveDirectorySecurityInheritance.None);
ActiveDirectoryAccessRule ruleWrite = new ActiveDirectoryAccessRule(
account,
ActiveDirectoryRights.WriteProperty,
AccessControlType.Deny,
ActiveDirectorySecurityInheritance.None);
if (Permission == "User shall be able to export private key from an RSA keypair")
{
directoryEntry.ObjectSecurity.AddAccessRule(ruleRead);
directoryEntry.ObjectSecurity.AddAccessRule(ruleWrite);
directoryEntry.Options.SecurityMasks = SecurityMasks.Dacl;
directoryEntry.CommitChanges();
Console.WriteLine("Added Deny Access to Read & Write.");
}
if (Permission == "User is able to decrypt imported data")
{
directoryEntry.ObjectSecurity.RemoveAccessRule(ruleRead);
directoryEntry.ObjectSecurity.RemoveAccessRule(ruleWrite);
directoryEntry.Options.SecurityMasks = SecurityMasks.Dacl;
directoryEntry.CommitChanges();
Console.WriteLine("Removed Deny Access to Read & Write.");
}
directoryEntry.Close();
directoryEntry.Dispose();
注意:请先在您的测试环境中测试以上所有代码。
如果我正确地回答了问题,你正在尝试将 AD 用作你的 AuthZ 商店和你的 AuthZ 引擎。前者(将其用作数据存储)非常有意义,但是,我认为它不是评估应用程序访问权限的正确工具。
我要做的是将您的群组分为两个级别:
级别 1 - 权限组(例如可以加密、可以解密等)
2 级 - 角色 - 这些是各种权限组的成员,反过来用户被添加到这些组以授予他们角色。当他们的登录令牌由 Windows.
构建时,他们将继承角色所拥有的权限
假设您的应用程序使用 Windows 身份验证,WindowsTokenRoleProvider
(https://msdn.microsoft.com/en-us/library/system.web.security.windowstokenroleprovider(v=vs.110).aspx) 会将所有组成员身份显示到您的应用程序中,然后您可以检查是否有人在权限组并让他们做某事(或不做)...
我查看了许多搜索结果,但我正在努力寻找一种方法来以编程方式(使用 C#)在 Active Directory 中创建自定义权限和自定义组。
我有一个应用程序需要大约50个单独的权限,例如:可以加密数据,可以解密数据,可以导出私钥,可以删除密钥对等。这些权限将分配给一个自定义组.例如,该组可能被称为:标准用户、安全管理员等
用户将被分配到这些组中的一个或多个。我需要通过 Active Directory 管理所有这些。正在编写的软件是用 C# 编写的。用户将在 Active Directory 中。
当要执行应用程序上的功能时,软件将检查用户是否具有特定权限。如果用户没有权限,则他们将需要输入覆盖。此覆盖只是提示输入具有相关权限的另一个用户的凭据。
我想强调的是,这需要通过 Active Directory 进行管理,因为该软件 运行 在域上,权限将由域管理员管理。
因此,我认为 ASP.Net 角色功能还不够?另外,我不确定Azure AD是否与Windows AD相同。
对于 .NET assembly/namespace 将提供以下功能的任何指导,我将不胜感激:
- 创建权限
- 创建群组
- 为组分配权限
- 将用户分配到组
- 从组中删除用户
- 从组中删除权限
我需要以编程方式执行此操作,因为该软件将有一个安装程序,并且将负责在安装期间添加特定于应用程序的自定义权限和组(如果它们尚不存在)。
我可能处理这个问题有误,所以我愿意接受其他方面的建议。只要我能做到以上那点就好了!
谢谢!
据我了解,
在这里你可以试试下面的代码
试一次
1) 创建群组
PrincipalContext principalContext =
new PrincipalContext(ContextType.Domain, LDAPDomain, LDAPContainer,
LDAPAdmin, LDAPPassword);
GroupPrincipal group = GroupPrincipal.FindByIdentity(principalContext, "groupName");
if (group == null)
{
GroupPrincipal groupPrincipal = new GroupPrincipal(principalContext);
groupPrincipal.Name = "groupName";
groupPrincipal.SamAccountName = "samAccountName";
groupPrincipal.UserPrincipalName = "userPrincipleName";
groupPrincipal.GroupScope = GroupScope.Global;
groupPrincipal.Description = "groupNameDescription";
groupPrincipal.DisplayName = "groupNameDisplayName";
groupPrincipal.Save();
}
2) 将用户添加到组
GroupPrincipal group = GroupPrincipal.FindByIdentity(principalContext, "groupName");
UserPrincipal user = UserPrincipal.FindByIdentity(principalContext, "userName");
bool isUserAdded = false;
if (user != null & group != null)
{
if (user.IsMemberOf(group))
{
//Do Code
}
else
{
group.Members.Add(user);
group.Save();
isUserAdded = user.IsMemberOf(group);
}
}
if (isUserAdded)
{
//Do Code
}
3) 从组中删除用户
GroupPrincipal group = GroupPrincipal.FindByIdentity(principalContext, "groupName");
UserPrincipal user = UserPrincipal.FindByIdentity(principalContext, "userName");
bool isUserRemoved = false;
if (user != null & group != null)
{
if (user.IsMemberOf(group))
{
group.Members.Remove(user);
group.Save();
isUserRemoved = user.IsMemberOf(group);
}
else
{
//Do Code
}
}
if (!isUserRemoved)
{
//Do Code
}
4) 添加或删除组的访问规则(权限)
在我这边,我不清楚你的逻辑或实现是什么,
但在这里我试图给出一个解决方案来添加或删除组的访问规则
//DirectoryEntry for OU Level
DirectoryEntry directoryEntry = new DirectoryEntry("LDAP://OU=MYOU,DC=MYDC,DC=COM");
NTAccount account = new NTAccount("MYDC", "groupName");
ActiveDirectoryAccessRule ruleRead = new ActiveDirectoryAccessRule(
account,
ActiveDirectoryRights.ReadProperty,
AccessControlType.Allow,
ActiveDirectorySecurityInheritance.None);
ActiveDirectoryAccessRule ruleWrite = new ActiveDirectoryAccessRule(
account,
ActiveDirectoryRights.WriteProperty,
AccessControlType.Deny,
ActiveDirectorySecurityInheritance.None);
if (Permission == "User shall be able to export private key from an RSA keypair")
{
directoryEntry.ObjectSecurity.AddAccessRule(ruleRead);
directoryEntry.ObjectSecurity.AddAccessRule(ruleWrite);
directoryEntry.Options.SecurityMasks = SecurityMasks.Dacl;
directoryEntry.CommitChanges();
Console.WriteLine("Added Deny Access to Read & Write.");
}
if (Permission == "User is able to decrypt imported data")
{
directoryEntry.ObjectSecurity.RemoveAccessRule(ruleRead);
directoryEntry.ObjectSecurity.RemoveAccessRule(ruleWrite);
directoryEntry.Options.SecurityMasks = SecurityMasks.Dacl;
directoryEntry.CommitChanges();
Console.WriteLine("Removed Deny Access to Read & Write.");
}
directoryEntry.Close();
directoryEntry.Dispose();
注意:请先在您的测试环境中测试以上所有代码。
如果我正确地回答了问题,你正在尝试将 AD 用作你的 AuthZ 商店和你的 AuthZ 引擎。前者(将其用作数据存储)非常有意义,但是,我认为它不是评估应用程序访问权限的正确工具。
我要做的是将您的群组分为两个级别:
级别 1 - 权限组(例如可以加密、可以解密等)
2 级 - 角色 - 这些是各种权限组的成员,反过来用户被添加到这些组以授予他们角色。当他们的登录令牌由 Windows.
构建时,他们将继承角色所拥有的权限
假设您的应用程序使用 Windows 身份验证,WindowsTokenRoleProvider
(https://msdn.microsoft.com/en-us/library/system.web.security.windowstokenroleprovider(v=vs.110).aspx) 会将所有组成员身份显示到您的应用程序中,然后您可以检查是否有人在权限组并让他们做某事(或不做)...