WIF – Tracing


Há algum tempo eu comentei aqui em como habilitar e manipular o tracing em serviços WCF. Utilizando essa mesma estrutura, a Microsoft também incorporou este recurso no WIF, para possibilitar o diagnóstico de eventuais problemas ou comportamentos estranhos que possam acontecer durante o desenvolvimento ou mesmo durante o ambiente de produção.

Assim como serviços WCF, o WIF também é baseado em mensagens sendo trafegadas entre as partes envolvidas, que determinam as requisições de autenticação, a resposta informando se o usuário é válido ou não, processo de logout, etc. O tracing do WIF também é bastante completo, e nos permite visualizar as mensagens de forma gráfica, utilizando o utilitário Service Trace Viewer.

O uso deste tracing está disponível tanto para o autenticador (STS) quanto pela aplicação cliente (RP), e isso se dá através de trace sources, que foram criados pela Microsoft durante a construção do WIF. Esse trace source é chamado de Microsoft.IdentityModel, e podemos utilizá-lo em ambos os lados (STS e RP), para capturar os procedimentos que estão acontecendo nas duas partes. Abaixo temos o código para habilitar o tracing do lado do autenticador, e se quiser utilizar pelo cliente (RP), tudo o que precisa ser feito é colocar esta mesma configuração, alterando somente o nome do arquivo para que um não sobrescreva o do outro.

<system.diagnostics>
  <sources>
    <source name=”Microsoft.IdentityModel” switchValue=”All”>
      <listeners>
        <add name=”xml”
             type=”System.Diagnostics.XmlWriterTraceListener”
             initializeData=”C:TempAutenticador.xml” />
      </listeners>
    </source>
  </sources>
  <trace autoflush=”true” />
</system.diagnostics>

Dentro do arquivo gerado, os logs estarão distribuídos entre várias categorias, onde cada uma delas representa um estágio ou processo diferente. Essas categorias estão listadas abaixo, com uma descrição superficial sobre cada uma delas:

  • ChunkedCookieHandler: Nome, tamanho, domínio e data de expieração do cookie gerado para o usuário.
  • ClaimsPrincipal: Informações sobre a IPrincipal que foi criada, contendo o nome e o conjunto de claims.
  • DeflateCookie: Basicamente traz informações sobre o processo de compressão do cookie, incluindo o tamanho original e o comprimido.
  • HashTrace: Informações sobre tamanho e valor das assinaturas digitais do conteúdo Xml.
  • PassiveMessage: Contém um conjunto de informações permitinentes ao ambiente passivo, que são representadas pela requisição HTTP (wa, wresult e wctx).
  • Reference: Cataloga informações sobre o processo de cálculo dos digests (hash).
  • Token: Como o próprio nome diz, temos aqui informações sobre o token, trazendo informações a cada token específico (SessionTokens, Saml11 e Saml2).
  • WsFedMessage: Armazena informações que chegam até a aplicação consumidora, que cataloga cada estágio do processamento do token.
  • Exceptions: Problemas que ocorrem durante o processo de autenticação, incluindo toda a stack até o erro.
  • AppDomain Unloading: Informações sobre o descarregamento do AppDomain da aplicação.

Deixe uma resposta