验证用户凭据

时间:2013-02-28 19:07:39

标签: c# windows-security

我有一个独特的困境。

我正在开发一个将测试用户帐户权限的类,我已经涵盖了大部分基础。但我最关心的是对NullSID进行测试。

我担心的原因是:

if(user != null)
{
   role.IsInRole(WindowsBuiltInRole.Administrator);
}

显然是一个简单的实现来演示,但WindowsBuiltInRole是否会严格根据单个机器或域进行检查?如果用户域帐户确实是管理员,它是否会成功测试?

或者更好的方法来测试五个或六个域SID令牌?其他用户帐户(例如网络服务帐户)是否会以相同的方式操作?什么是确保令牌值真实性的最佳方法。

任何输入都会很棒。

2 个答案:

答案 0 :(得分:1)

通过以下位置找到WindowsBuiltInRole枚举的定义:

WindowsBuiltInRole Enumeration

WindowsBuiltInRole.Administrator角色确实适用于计算机和域,没有任何限制。

WindowsBuiltInRole.PowerUser将能够运行应用程序,但无法安装或卸载内容。

WindowsBuiltInRole.AccountAdministrator可以管理帐户甚至更改权限,但不会进行域范围的更改(如在分布式部署中)。

WindowsBuiltInRole.BackupOperator可以覆盖安全限制,仅用于备份或恢复文件。

WindowsBuiltInRole.Replicator支持域中的文件复制。

这些不同的角色可能看起来很模糊,但可以推断,除管理员之外的所有角色都可以执行一些管理员任务,但不是全部。

答案 1 :(得分:1)

WindowsBuiltInRole枚举完全对应于Windows SIDs,并且恰好与与 Windows内置组Well-known security identifiers in Windows operating systems相关联的完善的SIDS,所有SID以'S-1-5-32 - '。

枚举值的整数值对应于sid中的最后一个数字,因此,因为WindowsBuiltInRole.Administrator是544,所以它对应于S-1-5-32-544。因此,如果用户属于Administrators组,那么使用此代码进行检查的确是如此:

  

SID:S-1-5-32-544

     

名称:管理员

     

描述:一个内置组。   初次安装操作系统后,唯一的   该组的成员是管理员帐户。当一台电脑   加入域,Domain Admins组将添加到管理员   组。当服务器成为域控制器时,企业   管理员组也会添加到管理员组。