.Net角色身份验证PrincipalPermission失败

时间:2012-11-23 20:54:03

标签: .net vb.net security active-directory principalpermission

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

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,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089”   版本= “1” >   身份验证=“真实”   Role =“App Group”/>   

     

需求是:   IPermission class =“System.Security.Permissions.PrincipalPermission,mscorlib,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089”   版本= “1” >   身份验证=“真实”   Role =“App Group”/>   

     

失败的程序集或AppDomain是:   mscorlib,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089“

如果我需要包含其他任何内容,请与我们联系。

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

好吧,这只是一个疯狂的猜测,我碰巧看到有关SAMAccountName和专有名称的讨论,但不知道这是否仍是当前问题:Active Directory and PrincipalPermission

老实说,我不知道“角色”是否可以执行完整的LDAP过滤器,但让我们试一试: 我们假设你的小组专有名称是这样的:

“CN = MyGroup的,OU = SecurityGroups,OU =部,DC =公司,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中的组可能会成功,因为它们可能位于您的活动目录的根目录中,因此对于其他组,您可能需要提供唯一的SAMAccount,或者为搜索提供一些结构。