Sometimes the architecture in active directory is very complicated. There are many groups in my AD and they are hierarch开发者_如何学Cical.
Take this for example: Group A is the top group, it has a child Group B, and Group B also has a child C. C is the leaf node and it is a person in AD. Is there an approach to identify C is a member of Group A.
I can do this by enumerating the "memberof" property recursively in AD. But is there a more efficient mechanism to do that work?
I need to do that in .NET with C#. Any help will be appreciated.
Check out UserPrincipal.GetAuthorizationGroups. It's giving you all the groups in the token, as mentioned by Swanny
Not sure if there is a better way these days but this is how we did it back on the .Net 1.0 day. There is a method I think called GetTokens() or something like that. It might only be available via the COM interface (so you need to wrap it in an interop). It gives you back a list of SIDs for each thing that the user is ultimately a member of (even if a group within a group within a group) and then you can just get the SID of the group your interested in and check whether it is in the list returned earlier. Getting the list of SIDs is a little resource heavy so you might want to cache the result. If you make lots of calls at once you can slow the AD down.
精彩评论