Padrões de autorização do serviço WCF

Estou implementando um serviço WCF seguro. A autenticação é feita usando nome de usuário / senha ou credenciais do Windows. O serviço está hospedado em um processo de serviço do Windows. Agora, estou tentando descobrir a melhor maneira de implementarautorização para cada operação de serviço.

Por exemplo, considere o seguinte método:

public EntityInfo GetEntityInfo(string entityId);

Como você deve saber, no WCF, existe um objeto OperationContext do qual você pode recuperar as credenciais de segurança transmitidas pelo chamador / cliente. Agora,autenticação já teria terminado no momento em que a primeira linha do método é chamada. No entanto, como implementamos a autorização se a decisão depender dos próprios dados de entrada? Por exemplo, no caso acima, digamos que usuários 'admin' (cujas permissões são armazenadas em um banco de dados) podem obter informações de entidade, e outros usuários não devem ser permitidos ... onde colocamos as verificações de autorização?

Digamos que colocamos na primeira linha do método da seguinte forma:

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

Agora, há algumas perguntas:

Será que validar o entityId (por exemplo, verificar valor nulo / vazio etc) ANTES da verificação de autorização ou INSIDE a verificação de autorização? Em outras palavras, se as verificações de autorização devem ser incluídas em todos os métodos, isso é um bom padrão? Qual deve ser a validação ou autorização do primeiro argumento?

Como podemos testar um serviço WCF quando as verificações de autorização estão em todo lugar, e não temos um OperationContext no teste unitário !? (Supondo que estou tentando testar essa implementação de classe de serviço diretamente sem qualquer configuração do WCF).

Alguma idéia caras?

questionAnswers(3)

yourAnswerToTheQuestion