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.
Abaixo o código Marmeid do diagrama de sequencia:
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 LoginLast updated
Was this helpful?