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)
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!"
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)