Laden...

WCF Zugriffssicherheit per PrincipalPermission

Erstellt von Grumbler85 vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.077 Views
G
Grumbler85 Themenstarter:in
538 Beiträge seit 2008
vor 12 Jahren
WCF Zugriffssicherheit per PrincipalPermission

Hallo,

ich habe einen WCF Service im IIS laufen, dort folgendes Konstrukt:


[PrincipalPermission(SecurityAction.Demand, Role = "group")]
    public class ABCService : ServiceBase, IABCService
    {
        public ABCService()
        {
            AppDomain.CurrentDomain
                    .SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
        }

Die PrincipalPermission wirkt also auf die Klasse - dummerweise auch auf den Konstruktor, was ich eigentlich nicht möchte, denn der Service soll die Klasse ja ausführen können. CurrentPrincipal ist zum Zeitpunkt des Konstruktors allerdings Nicht authentifiziert.
Workaround - alle Methoden mit dem PrincipalPermissionAttribute kennzeichnen - das ist aber keine ganz so schöne lösung, wie ich finde.

Kennt dazu jemand eine bessere Idee?

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)

6.911 Beiträge seit 2009
vor 12 Jahren

Hallo Grumbler85,

CurrentPrincipal ist zum Zeitpunkt des Konstruktors allerdings Nicht authentifiziert.

Warum nicht? Hast du einen Singleton-Service? Od. vertue ich mich jetzt?

Kennt dazu jemand eine bessere Idee?

Angenommen ich vertue mich (oben), dann könntest du die Service-Klasse als Proxy um für eine andere Klasse erstellen und in der anderen Klasse das Attribut setzen. Also grob so:


[PrincipalPermission(SecurityAction.Demand, Role = "group")]
internal class ABCServiceCore : ServiceBase, IABCService
{
    public ABCServiceCore()
    {
        AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
    }

    // hier die Service-Implementierung

    public void IrgendeineServiceMethode()
    {

    }
}

public class ABCService : IABCService
{
    private Lazy<ABCServiceCore> _abcServiceCore = new Lazy<ABCServiceCore>();

    public void IrgendeineServiceMethode()
    {
        _abcService.Value.IrgendeineServiceMethode();
    }
}

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

G
Grumbler85 Themenstarter:in
538 Beiträge seit 2008
vor 12 Jahren

Hm - die ServiceBehaviour könnte tatsächlich einfluss darauf haben ..
Aktuell habe ich keine gesetzt. Ich untersuche morgen mal, ob ich damit etwas erreichen kann.

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)