如何安全地确保当前用户属于 Active Directory 组?
How can I securely ensure the current user belongs to an Active Directory Group?
我正在创建一个 C# Winform 应用程序,它将用于公司域 (Windows Active Directory)。该应用程序的行为如下:
- 当用户打开应用程序时,应用程序会检查当前用户是否属于 Active Directory 组。
- 如果是,则该应用允许用户使用该应用。
从 google 搜索中,我找到了几种检查用户是否属于 Active Directory 组的方法。
例如这里的 link => How to check if a user belongs to an AD group?
我担心的是其中的安全部分。如果有人欺骗了用户名和域怎么办。他不需要知道密码就可以访问该应用程序。
不要查找。用户所属的每个组的 SID(递归地)是用户登录令牌的一部分。所以你可以只使用 WindowsPrincipal.IsInRole()
。如果你只有组名,你可以这样写:
var currentUser = new WindowsPrincipal(WindowsIdentity.GetCurrent());
currentUser.IsInRole("SomeGroup")
That translates the name into the SID 并检查该 SID 的登录令牌。这需要网络请求。如果您可以给它组的 SID,那么您可以保存该网络请求:
var groupSid = new SecurityIdentifier("S-1-5-21-blah");
currentUser.IsInRole(groupSid)
我正在创建一个 C# Winform 应用程序,它将用于公司域 (Windows Active Directory)。该应用程序的行为如下:
- 当用户打开应用程序时,应用程序会检查当前用户是否属于 Active Directory 组。
- 如果是,则该应用允许用户使用该应用。
从 google 搜索中,我找到了几种检查用户是否属于 Active Directory 组的方法。 例如这里的 link => How to check if a user belongs to an AD group?
我担心的是其中的安全部分。如果有人欺骗了用户名和域怎么办。他不需要知道密码就可以访问该应用程序。
不要查找。用户所属的每个组的 SID(递归地)是用户登录令牌的一部分。所以你可以只使用 WindowsPrincipal.IsInRole()
。如果你只有组名,你可以这样写:
var currentUser = new WindowsPrincipal(WindowsIdentity.GetCurrent());
currentUser.IsInRole("SomeGroup")
That translates the name into the SID 并检查该 SID 的登录令牌。这需要网络请求。如果您可以给它组的 SID,那么您可以保存该网络请求:
var groupSid = new SecurityIdentifier("S-1-5-21-blah");
currentUser.IsInRole(groupSid)