Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

A seguir serão apresentados alguns exemplos de fluxos:

FLUXO 1 - Caminho feliz

Image Modified


  1. O usuário, no navegador, entra na tela de login web
  2. Após a inserção das credenciais, é efetuada uma requisição ao login-service (*1)
  3. Caso a autenticação seja realizada com sucesso, será retornada informações dos tokens (access_token e refresh_token) (*2) e será automaticamente redirecionado para o aplicativo padrão (portais, menu, dashboard, entre outros) (*3)
  4. Com os tokens devidamente armazenados, eles são enviados para o acesso a um determinado endpoint (*4)
  5. O DSS architeture efetuará a validação do token enviado (*4) e caso esteja tudo OK, o acesso será autorizado com a requisição concluída (*5 e *6).

FLUXO 2 - Requisição direta ao front-end


Image Modified


  1. O usuário, no navegador, acessa diretamente um endereço correspondente a uma tela front-end (menu, dashboard, portal, entre outros) (*1);
  2. O front-end tenta acessar um endpoint seguro (*2);
  3. Na validação do endpoint, foi verificado que não existem tokens (acesso e atualização) (*2), sendo retornado o erro HTTP Status 401 (não autorizado) (*3);
  4. O front-end interpreta este tipo de erro e redireciona para a tela de login web para que as credenciais sejam informadas (*4);
  5. Após a inserção das credenciais, é efetuada uma requisição ao login-service (*5);
  6. Caso a autenticação seja realizada com sucesso, será retornada informações dos tokens (access_token e refresh_token) (*6) e será automaticamente redirecionado para o endereço de back_to correspondente ao front-end que efetuou o redirecionamento na etapa 4 (*7);
  7. Com os tokens devidamente armazenados, eles são enviados novamente para o endpoint seguro (*8);
  8. O DSS architeture efetuará a validação do token enviado (*8) e caso esteja tudo OK, o acesso será autorizado com a requisição concluída (*9 e *10).

FLUXO 3 - Requisição com um token inválido e/ou expirado

Image Modified


  1. O front-end tenta acessar um endpoint seguro (*
2
  1. 1);
  2. Na validação do endpoint, foi verificado que o token está inválido e/ou expirado (*2), sendo retornado o erro HTTP Status 401 (não autorizado) (*
3
  1. 2);
  2. O front-end interpreta este tipo de erro e reconhece que existe um refresh_token
válido
  1. , portanto tenta efetuar a renovação do token por intermédio do login-service (*
5
  1. 3);
  2. Caso a validação do refresh_token
de atualização
  1. seja concluída com sucesso, serão retornados novos tokens (access_token e refresh_token) (*
6
  1. 4)
  2. Com os tokens devidamente atualizados em seu armazenamento, eles são enviados novamente para o endpoint seguro (*
8
  1. 5);
  2. O DSS architeture efetuará a validação do token enviado (*8) e caso esteja tudo OK, o acesso será autorizado com a requisição concluída (*
9 e *10
  1. 6).

04. ARMAZENAMENTO DOS TOKENS

...

Os tokens devem ser armazenados para não houver a necessidade de efetuar sua geração a cada requisição, quanto ao armazenamento, foram consideradas três propostas:

sessionStorage

PRÓSCONTRAS
  • Fácil interação
 Capacidade
  • Capacidade de armazenamento maior 5-10MB
 
-
  • Possível inviabilidade devido a cross domain
   -
  • Abertura de uma nova URL é considerada outra sessão
.

...

  • , portanto os dados não são repassados
Aviso
titleAviso

Devido a característica do DSS, onde os serviços serão distribuídos em diversas portas, esta opção se torna inviável para utilização.

localStorage

PRÓSCONTRAS
  • Fácil interação
  • Capacidade de armazenamento em 5MB.
  •  Necessidade

STORAGE (localStorage)

 - Fácil interação
 - Capacidade em 5MB - Necessidade
  • de gerenciar um cross domain pois o storage é disponível por host e porta
 - Opções Iframe
   -
  • Opções de visibilidade com o uso de Iframes
    • Sincronização de eventos (abertura da tela com set da localStorage em cada projeto para receber o parametro)

COOKIES

Informações
titlePOC de Iframe

Com o uso de Iframes, é possível seguir o conceito de compartilhamento dos dados conforme diagrama abaixo:

Image Added

Foram realizados POCs para verificar a visibilidade da informação do token na localStorage, sendo seus resultados apresentados a seguir:

Situação 1: Login web e front-end com o mesmo domínio (com portas diferentes), onde o endereço localhost:4200 (login web) e localhost:4400 (front-end).

Image Added


Situação 2: Login web e front-end com domínios e portas diferentes, onde o endereço localhost:4200 (login web) e 172.16.42.7:4400 (front-end). Nesta situação, devido a questões de segurança não foi possível compartilhar as informações do localStorage.

Image Added


Situação 3: Login web como main-domain e front-end como sub-domain e portas diferentes, onde o endereço dss.com:4200 (login web) e menu.dss.com:4400 (front-end).

Image Added

Cookies

-
PRÓSCONTRAS
  • Alinhado com futuras entregas do Identity
 -
  • Visibilidade entre domínios
 -
  • Configurações de visibilidade de acordo com regras de segurança dos próprios cookies
-
  • Limitação em 4KB
  -
  • Possivel implementação de um cookie opaco
  -
  • Pode ter uma lentidão para regatar o valor do cookie
Informações
titlePOC de Cookies

Foram realizados POCs para verificar a visibilidade da informação no cookie, sendo seus resultados apresentados a seguir:

Situação 1: Login web e front-end com o mesmo domínio (com portas diferentes), onde o endereço localhost:4200 (login web) e localhost:4400 (front-end).

Image Added


Situação 2: Login web e front-end com domínios e portas diferentes, onde o endereço localhost:4200 (login web) e 172.16.42.7:4400 (front-end). Nesta situação, devido a questões de segurança não foi possível compartilhar as informações do cookie.

Image Added

Nota
titleNota

Para este tipo de situação, teoricamente uma alternativa seria parametrizar o atributo SameSite='None', porém para isso é obrigatório que o Cookie possua também o parâmetro Secure=true, o que pode impactar na obrigação de instalar todos os serviços do DSS com o protocolo HTTPS. 


Situação 3: Login web como main-domain e front-end como sub-domain e portas diferentes, onde o endereço dss.com:4200 (login web) e menu.dss.com:4400 (front-end).

Image Added

05. SERVIÇO DE LOGIN

O serviço de login é iniciado com o uso do spring-boot.

A seguir são apresentadas as propriedades específicas deste serviço que podem ser configuradas no arquivo application.properties.

PropriedadeDescrição
totvs.jwt.audienceAudiência utilizada para a geração e autorização do token JWT.
totvs.jwt.expirationTempo de expiração do token JWT (em segundos).
totvs.jwt.tenantId

Valor parametrizável da claim tenantId

(Pendente Issue: DFWKDATASUL-4723)

Nota
titleNota

As propriedades abaixo presentes no produto DTS4THF foram descontinuadas para o uso no modelo DSS.

PropriedadeDescrição
totvs.jwt.audience.extIdentificador da audiência quando utilizado o acesso por servidor externo
totvs.jwt.cert.aliasAlias para decodifcação do token JWT (utilizado quando existir um certificado próprio)
totvs.jwt.cert.aliasdefaultAlias padrão para decodificação do token JWT
totvs.jwt.cert.defaultCertificado padrão para decodificação do token JWT

Após a inicialização do mesmo, estará disponível tanto a interface da tela de login (front-end) quanto o serviço de autenticação dos usuários (back-end). 

06. ANEXOS

RFC000032 - Autenticação Aplicações On-Premises (RASCUNHO)

View file
nameRFC000032.pdf
height250


app.component.ts do front-end para recebimento do localStorage

View file
nameapp.component.ts
height250