WCF patrones de autorización de servicio

Estoy implementando un servicio seguro de WCF. La autenticación se realiza mediante el nombre de usuario / contraseña o las credenciales de Windows. El servicio está alojado en un proceso de servicio de Windows. Ahora, estoy tratando de encontrar la mejor manera de implementarautorización para cada operación de servicio.

Por ejemplo, considere el siguiente método:

public EntityInfo GetEntityInfo(string entityId);

Como sabrá, en WCF, hay un objeto OperationContext desde el cual puede recuperar las credenciales de seguridad que el llamante / cliente ha transferido. Ahora,autenticación ya habría terminado para cuando se llame la primera línea del método. Sin embargo, ¿cómo implementamos la autorización si la decisión depende de los propios datos de entrada? Por ejemplo, en el caso anterior, digamos que los usuarios 'admin' (cuyos permisos, etc. están almacenados en una base de datos), pueden obtener información de la entidad, y otros usuarios no deberían ser permitidos ... ¿dónde colocamos los controles de autorización?

Digamos que lo ponemos en la primera línea del método así:

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

Ahora, hay un par de preguntas:

¿Validamos el ID de entidad (por ejemplo, verifique el valor nulo / vacío, etc.) ANTES de la verificación de autorización o DENTRO DE la verificación de autorización? En otras palabras, si los controles de autorización deberían incluirse en cada método, ¿es un buen patrón? ¿Qué debería suceder primero - validación de argumentos o autorización?

¿Cómo probamos en unidad un servicio WCF cuando las verificaciones de autorización están por todas partes así, y no tenemos un OperationContext en la prueba de unidad? (Suponiendo que estoy intentando probar la implementación de esta clase de servicio directamente sin ninguna configuración de WCF).

¿Alguna idea chicos?

Respuestas a la pregunta(3)

Su respuesta a la pregunta