adr*_*nks 6 .net c# security iprincipal active-directory
我的应用程序很大程度上依赖于用户的授权.在其中,我IPrincipal.IsInRole()用来检查用户是否在正确的组中:
IPrincipal principal = Thread.CurrentPrincipal;
bool inRole = principal.IsInRole("mydomainname\some role with a long name");
Run Code Online (Sandbox Code Playgroud)
这在大多数情况下都可以正常工作,但如果主体是a的实例,则会失败(返回错误的结果)WindowsPrincipal.我发现为了使它正常工作,我必须截断我传入的角色的名称,长度为32个字符(包括域名和\):
IPrincipal principal = Thread.CurrentPrincipal; // <- returns a WindowsPrincipal
bool inRole = principal.IsInRole("mydomainname\some role with a lo");
Run Code Online (Sandbox Code Playgroud)
截断角色名称然后正常工作.为什么?这是一个错误/功能/记录的问题吗?我有一个暗示,它可能与Win2000域有关,但无法找到任何信息.
一些额外的信息:
这是一个问题,因为应用程序可以配置为使用活动目录或"自定义"进行授权("自定义"是支持接口的任何授权提供程序 - 可以是基于SQL的,基于文件的等等..).配置自定义时,角色很可能不需要截断,因此我不想在我的代码中处理这种特殊情况.此外,我还有另一部分应用程序使用System.DirectoryServices.AccountManagement命名空间中的类来查找组成员身份.这需要完整的角色名称,如果被截断则不起作用.