【问题标题】:Role-based security on DLLDLL 上基于角色的安全性
【发布时间】:2012-02-09 05:34:26
【问题描述】:

帮助!这段代码有什么问题?我有一个 Windows 窗体应用程序,我需要在其中使用基于角色的安全性来保护 DLL;只有“MyRole”中的某个人才能调用此程序集。

我尝试了两种不同的方法来设置当前主体,但我得到的只是“请求主体权限失败”。

这是一个演示问题的小型控制台应用程序。提前致谢!

Imports System.Security

Module Module1

    Sub Main()

        Try
            AppDomain.CurrentDomain.SetPrincipalPolicy(Principal.PrincipalPolicy.WindowsPrincipal)

            'Dim oCurrPrincipal As New Principal.WindowsPrincipal(Principal.WindowsIdentity.GetCurrent())
            'Threading.Thread.CurrentPrincipal = oCurrPrincipal

            Dim oWriter As New Writer
            oWriter.WriteLog("It seems so simple, why doesn't it work?")

        Catch ex As Exception
            Console.WriteLine(ex.ToString)
        Finally
            Console.ReadLine()
        End Try

    End Sub

End Module

Imports System.Security.Permissions
Imports System.Security

<PrincipalPermission(SecurityAction.Demand, Role:="MyRole")> _
Public Class Writer

    Public Overloads Sub WriteLog(ByVal sMessage As String)
        Console.WriteLine(sMessage)
    End Sub

End Class

【问题讨论】:

    标签: .net code-access-security


    【解决方案1】:

    您是否尝试过使用实际上是 MyRole 角色的委托人?您当前的代码将导致使用 WindowsPrincipal,并且该主体的角色将对应于用户的 Windows/域组,其中可能不包括“MyRole”。如果您不确定如何使用目标角色中的主体对此进行测试,请尝试以下操作,而不是您的 SetPrincipalPolicy 调用:

    AppDomain.CurrentDomain.SetThreadPrincipal(New GenericPrincipal(New GenericIdentity("somebody"), New String() { "MyRole" }))
    

    【讨论】:

      猜你喜欢
      • 2013-03-21
      • 2011-05-12
      • 1970-01-01
      • 2012-03-18
      • 2019-03-13
      • 1970-01-01
      • 2011-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多