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?