.Net角色身份验证原则权限失败

.Net角色身份验证原则权限失败,.net,vb.net,security,active-directory,principalpermission,.net,Vb.net,Security,Active Directory,Principalpermission,我有一个vb.net 3.5应用程序,它使用PrincipalPermission类来确保用户是角色的成员。该代码适用于Active Directory域中的某些组,但不适用于其他组。 起初我认为空间是一个问题,但我检查了“域用户”是否有效。运行此代码时,我是应用程序组的成员 Imports System.Security Imports System.Security.Principal Imports System.Security.Permissions Private Func

我有一个vb.net 3.5应用程序,它使用PrincipalPermission类来确保用户是角色的成员。该代码适用于Active Directory域中的某些组,但不适用于其他组。 起初我认为空间是一个问题,但我检查了“域用户”是否有效。运行此代码时,我是应用程序组的成员

Imports System.Security
Imports System.Security.Principal
Imports System.Security.Permissions

    Private Function DemandSecurity() As Boolean
        AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal)
        Dim principalGroup As New PrincipalPermission(Nothing, "App Group")
        Try
            principalGroup.Demand()
            Debug.Print("Demanding pricipal permissions for current user on 'App Group' role succeeded. ")
        Catch secEx As SecurityException
            Debug.Print("Security Exception - Demanding pricipal permissions for current user on 'App Group' role failed. ")

            Application.DoEvents()
            MessageBox.Show("Permission denied. Output: " & vbNewLine & secEx.ToString, "App - Security Exception", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1)

            Return False
            Exit Function
        End Try
        Return True
    End Function
secEx.ToString的错误输出为

“System.Security.SecurityException:请求主体权限失败。 位于System.Security.Permissions.PrincipalPermission.ThrowSecurityException()处 在System.Security.Permissions.PrincipalPermission.Demand()中 在C:\Documents and Settings\me\My Documents\Visual Studio 2008\Projects\App\App\ApplicationEvents.vb中的App.My.MyApplication.DemandSecurity()处:第28行

失败的操作是: 需要 第一个失败的权限的类型是: System.Security.Permissions.PrincipalPermission

第一个失败的权限是: IPermission class=“System.Security.Permissions.PrincipalPermission,mscorlib,版本=2.0.0.0,区域性=中性,PublicKeyToken=b77a5c561934e089” version=“1”> Identity Authenticated=“true” Role=“应用程序组”/>

要求是: IPermission class=“System.Security.Permissions.PrincipalPermission,mscorlib,版本=2.0.0.0,区域性=中性,PublicKeyToken=b77a5c561934e089” version=“1”> Identity Authenticated=“true” Role=“应用程序组”/>

失败的程序集或AppDomain是: mscorlib,版本=2.0.0.0,区域性=中性,PublicKeyToken=b77a5c561934e089“


如果我需要包括任何其他内容,请告诉我

我想你最好检查一下你的广告群,看看这个问题:

好吧,这只是一个猜测,我碰巧看到了关于SAMAccountName和可分辨名称的讨论,但不知道这是否仍然是当前问题:

老实说,我不知道“角色”是否可以执行完整的LDAP筛选器,但让我们试试看: 假设您的组可分辨名称如下:

CN=MyGroup,OU=SecurityGroups,OU=Department,DC=Company,DC=com

为什么不试试这个:

Role="CN=MyGroup,OU=SecurityGroups,OU=Department,DC=Company,DC=com"

Role=@"Company.com\Department\Security Groups\MyGroup"  // Not sure about this one though
因为这个看起来更符合逻辑,可能是这样的:

Role=@"Company\SAMAccountNameOfYourGroup"

我认为您在CN=Users中的组可能会成功,因为它们可能位于active directory的根目录中,因此对于其他组,您可能需要提供唯一的SAMAccount,或者提供一些搜索结构。

谢谢Jorge。cn名称与windows 2000之前的名称匹配,因此无法使用。除非我错过了那篇文章的要点。澄清一下,这并不能回答问题。希望有人能提出这可能有什么问题。@RussellHart事实上,你说有些搜索失败,有些则没有,这很奇怪,就像你在行乞时在信息中所说的那样,闻起来像是一个命名问题,您是否尝试过使用LDAP浏览器并查询objectSID而不是名称?成功的组位于CN=Users中。失败的组位于同一域中的OU=安全组中。您如何更改上述代码以满足组织单位中某个组的要求?非常感谢任何建议,请作为新答案发布,以便我可以接受。ThanksI还尝试使用My.User.IsInRole,它也返回false。我绝对是这个角色的一员。