我有一个使用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“
如果我需要包含其他任何内容,请与我们联系。
答案 0 :(得分:0)
我认为您最好检查您的AD群组以查看此问题:http://social.technet.microsoft.com/Forums/en-US/winserverDS/thread/3e8e9209-17c7-4674-8780-7ae09c607118
答案 1 :(得分:0)
老实说,我不知道“角色”是否可以执行完整的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,或者为搜索提供一些结构。