检查(在C ++中)用户是否是某个LDAP / AD组的成员

时间:2016-10-04 12:44:42

标签: c++ active-directory ldap ldap-query

我正在维护一个C ++应用程序。我们必须添加对LDAP / AD的调用以进行授权。但我不是LDAP / AD(或COM调用)的专家,并且似乎有很多不同的方法来访问LDAP / AD。我会非常感谢你的一些建议!

我想要做的是"检查当前用户是否是某个Active Directory组的成员"。 (然后,用户将获得我们应用程序的特殊权限。)我们拥有组名称 - 我们有一个完全可识别的名称",如下所示:"CN=TheGroupName,OU=Groups,OU=_GlobalResources,OU=OrgCode,DC=domainpart1,DC=domainpart2,DC=net"

我的计划是这样做:Find current users active directory group C++使用GetCurrentProcessId + OpenProcess + OpenProcessToken + GetTokenInformation(使用TokenGroups)读取用户信息,遍历各组并为每个组SID执行LookupAccountSid,直到找到该组。但是LookupAccountSid调用很慢 - 它花了太长时间。

C#中有一个简单的解决方案:Check whether current user is a member of an active directory group但是如何在C ++中有效地做到这一点?

我应该......

(a)...对LDAP执行直接查询?有没有办法让当前用户成为这个群组的成员?" -call? (使用呼叫中的专有名称。)

-OR -

(b)...将专有名称转换为SID,使用GetTokenInformation / TokenGroups获取用户信息,然后查看该组的SID是否与返回的member-of-groups-array中的任何SID匹配?获取用户组的SID阵列很简单,但如何(快速)将组的可分辨名称转换为SID?

-OR -

(c)......使用一些完全不同的方法? : - )

0 个答案:

没有答案