Wzorce autoryzacji usług WCF

Implementuję bezpieczną usługę WCF. Uwierzytelnianie odbywa się przy użyciu nazwy użytkownika / hasła lub poświadczeń systemu Windows. Usługa jest hostowana w procesie usługi Windows. Teraz próbuję znaleźć najlepszy sposób wdrożeniaupoważnienie dla każdej operacji serwisowej.

Weźmy na przykład następującą metodę:

public EntityInfo GetEntityInfo(string entityId);

Jak wiadomo, w WCF istnieje obiekt OperationContext, z którego można pobrać poświadczenia bezpieczeństwa przekazane przez wywołującego / klienta. Teraz,poświadczenie skończyłby się już przed wywołaniem pierwszej linii w metodzie. Jak jednak wdrożyć autoryzację, jeśli decyzja zależy od samych danych wejściowych? Na przykład, w powyższym przypadku, powiedzmy, że użytkownicy „admin” (których uprawnienia itp. Są przechowywane w bazie danych), mogą uzyskać informacje o jednostce, a innym użytkownikom nie wolno zezwalać ... gdzie umieszczamy kontrole autoryzacji?

Powiedzmy, że umieściliśmy go w pierwszej linii metody w ten sposób:

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

Teraz jest kilka pytań:

Czy sprawdzamy poprawność encjiId (na przykład sprawdzamy wartość pustą / pustą itd.) PRZED sprawdzeniem autoryzacji lub WEWNĄTRZ sprawdzeniem autoryzacji? Innymi słowy, jeśli kontrole autoryzacji powinny być zawarte w każdej metodzie, czy jest to dobry wzór? Co powinno się zdarzyć w pierwszej kolejności?

W jaki sposób możemy przetestować usługę WCF, gdy sprawdzanie autoryzacji odbywa się w takim miejscu, a nie mamy OperationContext w teście jednostkowym !? (Zakładając, że próbuję przetestować implementację tej klasy usług bezpośrednio bez żadnej konfiguracji WCF).

Jakieś pomysły?

questionAnswers(3)

yourAnswerToTheQuestion