WCF-Dienstautorisierungsmuster

Ich implementiere einen sicheren WCF-Dienst. Die Authentifizierung erfolgt mit Benutzername / Kennwort oder Windows-Anmeldeinformationen. Der Dienst wird in einem Windows-Dienstprozess gehostet. Jetzt versuche ich herauszufinden, wie man das am besten umsetztGenehmigung für jeden Service-Vorgang.

Betrachten Sie beispielsweise die folgende Methode:

public EntityInfo GetEntityInfo(string entityId);

Wie Sie vielleicht wissen, gibt es in WCF ein OperationContext-Objekt, von dem Sie die vom Aufrufer / Client übergebenen Sicherheitsanmeldeinformationen abrufen können. Jetzt,Authentifizierung wäre zum Zeitpunkt des Aufrufs der ersten Zeile der Methode bereits beendet. Wie setzen wir jedoch die Autorisierung um, wenn die Entscheidung von den Eingabedaten selbst abhängt? Beispiel: In dem oben genannten Fall können Benutzer mit Administratorrechten (deren Berechtigungen usw. in einer Datenbank gespeichert sind) Entitätsinformationen abrufen, und andere Benutzer dürfen nicht zugelassen werden. Wo werden die Berechtigungsprüfungen durchgeführt?

Angenommen, wir setzen es in die erste Zeile der Methode wie folgt:

CheckAccessPermission(PermissionType.GetEntity, user, entityId) //user is pulled from the current OperationContext

Nun gibt es ein paar Fragen:

Validieren wir die EntityId (zum Beispiel überprüfen Sie Null / Leerwert usw.) vor der Berechtigungsprüfung oder innerhalb der Berechtigungsprüfung? Mit anderen Worten, wenn Berechtigungsprüfungen in jede Methode einbezogen werden sollen, ist das ein gutes Muster? Was soll als erstes passieren - Validierung oder Autorisierung?

Wie testen wir einen WCF-Dienst nach einem Unit-Test, wenn die Berechtigungsprüfungen überall so sind und wir im Unit-Test keinen OperationContext haben? (Angenommen, ich versuche, diese Dienstklassenimplementierung direkt ohne das WCF-Setup zu testen.)

Irgendwelche Ideen Jungs?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage