sexta-feira, 5 de abril de 2013

Como adicionar uma informação no Header da mensagem no WCF

Em alguns cenários que vivemos no cotidiano, faz-se necessário o envio de informações adicionais para um serviço, como por exemplo: o usuário que está acessando o sistema (não quis dizer o usuário de autenticação/autorização do serviço, mas sim o usuário que está utilizando o sistema que por sua vez consome o serviço para realizar alguma ação).

Como fazer isto evitando que em todo método do WCF você necessite incluir um novo parâmetro com a informação adicional? Basta utilizar o header da mensagem que é enviada ao serviço WCF!

Para incluir um header em todas as mensagens de um determinado endpoint, você precisará realizar as seguintes ações:

terça-feira, 4 de setembro de 2012

Aplicando Custom RoleProvider no WCF para autorizar a execução de método

Conforme explicado no post anterior sobre Custom RoleProvider, neste post utilizarei a classe do RoleProvider para implementar a autorização de execução de um método no WCF a partir da credential enviada pelo client.

Explicando melhor
Existem cenários em que queremos autorizar somente determinados usuários para executar determinados métodos. Esse é o exemplo que trato abaixo, aonde somente a role "GrupoConsulta" tem a permissão de executar o método "Consultar" no WCF.

Para que esta validação seja efetuada, o usuário vindo do client (via ClientCredential) deverá pertencer à role "GrupoConsulta". Esta verificação é feita utilizando o método "IsUserInRole" do RoleProvider, que foi implementado no post anterior. Com a classe do RoleProvider pronta, o trabalho a ser realizado no WCF é mais simples e requer apenas uma configuração e, claro, informar ao método do WCF que somente a Role "X" terá acesso de execução.

terça-feira, 28 de agosto de 2012

Custom RoleProvider

Aproveitando o post anterior, no qual eu publiquei um exemplo de implementação de um custom MembershipProvider, neste post tratarei sobre a implementação de um custom RoleProvider.

A implementação é bem simples!
Basta apenas herdar a classe RoleProvider (que se encontra no namespace: System.Web.Security) e sobrescrever os métodos que sua aplicação irá utilizar. Para o exemplo abaixo sobrescrevi somente o método "IsUserInRole", que o programa utiliza para verificar se o usuário pertence a determinada role.
public class customRoleProvider : RoleProvider
{
    public override bool IsUserInRole(string username, string roleName)
    {
        //Implementação para identificar se o usuário está na role informada.
    }

    //ocultei os outros métodos do RoleProvider
    //para facilitar o entendimento e
    //não ficar muito código no post.
}
Dentro da tag system.web, adicione a tag "roleManager" contendo a referência do custom RoleProvider.
<roleManager enabled="true">
   <providers>
      <add name="customRoleProvider" type="jQuaglio.customRoleProvider, jQuaglio" />
   </providers>
</roleManager>


Referência: http://msdn.microsoft.com/pt-br/library/system.web.security.roleprovider.aspx

terça-feira, 21 de agosto de 2012

Custom MembershipProvider

Para criarmos um controle de acesso a uma aplicação e reaproveitar todas as funcionalidades do Membership disponíveis no ASP.NET MVC ou ASP.NET WebForms, devemos utilizar a classe MembershipProvider, disponível no namespace: "System.Web.Security".

Crie uma classe e herde de MembershipProvider. Quando esta ação for realizada, obrigatoriamente precisaremos efetuar o override de alguns métodos. Não há necessidade de escrever um código para todos os métodos (isto dependerá do que for utilizado).