Ролевая безопасность в DLL - PullRequest
       11

Ролевая безопасность в DLL

0 голосов
/ 09 февраля 2012

Помощь! Что не так с этим кодом? У меня есть приложение Windows Forms, где мне нужно защитить 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

1 Ответ

0 голосов
/ 09 февраля 2012

Пытались ли вы использовать принципала, который на самом деле в роли MyRole?Ваш текущий код приведет к использованию WindowsPrincipal, и роли этого принципала будут соответствовать пользовательским группам Windows / доменов, которые предположительно не содержат «MyRole».Если вы не уверены, как это проверить, используя участника в целевой роли, попробуйте следующее вместо SetPrincipalPolicy вызова:

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