Autenticador

Descrição de funcionamento e implementações para a Sessão manager

A classe Autenticador é o componente top level do mecanismo, serve como um Facade dos outros componentes.

Essa classe é que será repassada no Injetor de Dependencia (DI) para os controllers e classes.

Para isso ele precisa ser implementado por uma classse concreta que saberá como Obter a sessão e trocar o token.

Esses dois métodos CriarSessao e ExchangeToken são os métodos base e uteis da classe Autenticador

Para tanto, a classe apenas delega essa função para a factory de criação de sessão SessaoFactory e TokenExchanger que realmente fazem o trabalho, sendo assim, na classe concreta é recomendável injetar a dependencia desses componentes no construtor.

Sendo assim, apenas esse controle se faz necessário no registro como singletown do ASP.Net, contudo a injeção recomendada é Singletown, sendo instanciado previamente.

Utilize a classe de extensão dos kits de implementação para esse fim pois eles já menipulam corretamente a criação do serviço no DI.

Diagrama base de implementação

Abaixo o código Marmeid do diagrama de sequencia:

https://mermaid.live/
sequenceDiagram
  participant F as Front
  participant API as API
  participant Auth as Autenticador

  F ->> API: Solicita Autenticação
  API ->> Auth: Solicita Token
    create participant TKN as Tokenizer
  Auth ->> TKN: Solicita Criação
  TKN -->> Auth: Cria Token e refresh token
  Auth -->> API: Devolve Token e Refresh Token
  API -->> F: Autentica retorna Token e RefreshToken
  F ->> F: Armazena os Tokens
  F ->> API: Solicita Serviço e passa Token (cookie)
  API ->> Auth: Solicita Restaurar sessão pelo token
  create participant SF as SessaoFactory
    Auth ->> SF: Solicita restauração da sessão
  SF->>TKN: Parseia o Token
  TKN-->>SF: Devolve TokenInfo
  SF->>SF: Cria uma instãncia de sessão com TokenInfo
  SF -->> Auth: Devolve Sessão
  Auth -->> API: Devolve Sessão
  API -->> F: Devolve retorno de Serviço
  Note over F, SF: Diagrama para token expirado

  F ->> API: Solicita Serviço e passa Token (cookie)
  API ->> Auth: Solicita Restaurar sessão pelo token
  Auth ->> SF: Solicita restauração da sessão
  SF->>TKN: Parseia o Token
  TKN-->>SF: Devolve Exception (Token Expirado)
   SF -->> Auth: Devolve Exception (Token Expirado)
  Auth -->> API: Devolve Exception (Token Expirado)
  API -->> F: Devolve 401 com header TokenExpirado = true
  F ->> F: Restaura Refresh Token
  F ->> API: Solicita o Exchange passando <br/>Token e Refresh Token
  API ->> Auth: Solicita o Exchange
    create participant Exch as TokenExchanger
  Auth->>Exch: Solicita o Exchanger
  Exch->>TKN: Parseia e valida os tokens
  TKN-->>Exch: Retorna TokenInfo e RefreshTokenInfo
    create participant Cl as Client-Host
    Exch->>Cl: Solicita Permissão
    Exch->>Cl: Edita TokenInfo
    Exch->>TKN: Solicita novos tokens
    TKN-->>Exch: Devolve novos tokens
    Exch->>Cl: Notifica Criação
    Exch-->>Auth: Devolve Novos Tokens
    Auth-->>API: Devolve novos Tokens
    API-->>F: Devolve novos Tokens
F ->> F: Armazena os Tokens
  F ->> API: Refaz solicitação do serviço;
  activate API
  API->>API: Refaz o processo de autenticação
  API->>API: Efetua o processo com a sessão válida
  deactivate  API
API -->> F: Devolve retorno de Serviço

  Note over F, Cl: Refresh Token Expirado

  F ->> API: Solicita Serviço e passa Token (cookie)
  API ->> F: Falha com token expirado<br/> conforme passos anteriores
  F ->> API: Solicita o exchange com refresh token

  activate API
  API->>API: Refaz o processo de autenticação
  API->>API: Falha pois o refresh token está expirado
  API-->>F: Devolve um 401 com o header RefreshTokenExpirado = true
  deactivate  API
  F ->> F: Redireciona para Login
Gere o diagrama no marmeid para uma melhor visualização

Last updated

Was this helpful?