【问题标题】:.Net Role Authentication PrincipalPermission fails.Net 角色身份验证 PrincipalPermission 失败
【发布时间】:2012-11-23 20:54:03
【问题描述】:

我有一个 vb.net 3.5 应用程序,它使用 PrincipalPermission 类来确保用户是角色的成员。该代码适用于 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:line 28 中的 App.My.MyApplication.DemandSecurity() 处

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

第一个失败的权限是: IPermission class="System.Security.Permissions.PrincipalPermission,mscorlib,版本=2.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089" 版本="1"> 身份验证=“真” 角色="应用组"/>

需求是: IPermission class="System.Security.Permissions.PrincipalPermission,mscorlib,版本=2.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089" 版本="1"> 身份验证=“真” 角色="应用组"/>

失败的程序集或 AppDomain 是: mscorlib,版本=2.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089"

如果我需要添加任何其他内容,请告诉我。

【问题讨论】:

  • 我也尝试过使用 My.User.IsInRole,它也返回 false。我绝对是这个角色。

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


【解决方案1】:

【讨论】:

  • 谢谢豪尔赫。 cn 名称与 Windows 2000 之前的名称相匹配,因此无法正常工作。除非我错过了那篇文章的重点。
  • 澄清一下,这并不能回答问题。希望有人能建议这可能有什么问题。
  • @RussellHart 您声明某些搜索失败而其他搜索失败的事实很奇怪,就像您在开始时在信息中所述的命名问题,您是否尝试过使用 LDAP 浏览器和查询 objectSID 而不是名称?
  • 成功的组在 CN=Users 中。失败的组位于同一域中的 OU=Security Groups 中。您如何更改上述代码以要求组织单位中的组?非常感谢任何指针,请作为新答案发布,以便我接受。谢谢
【解决方案2】:

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

老实说,我不知道“角色”是否可以执行完整的 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 中的组可能会成功,因为它们可能位于您的活动目录的根目录中,因此对于其他组,您可能需要提供唯一的 SAMAccount,或者为搜索提供一些结构。

【讨论】:

    猜你喜欢
    • 2015-02-01
    • 2018-02-08
    • 2011-10-09
    • 2016-09-23
    • 2011-07-05
    • 2014-01-24
    • 2016-08-29
    相关资源
    最近更新 更多