Árvore de páginas

Versões comparadas

Chave

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

CONTEÚDO

Informações

Índice
maxLevel3
minLevel2
indent50px
absoluteUrltrue

01. VISÃO GERAL

Disponibilizar um modelo de autorização de acesso a recursos, que permita abstração e flexibilidade com a utilização de um serviço de login independente (conforme modelo de arquitetura especificado na RFC000010). 

02. CONCEITOS APLICADOS

OAuth2 é um protocolo que permite aos usuários ter acesso limitado a recursos sem precisar expor suas credenciais.

Por isso, serão usados os fluxos de autenticação e autorização baseados no OAuth2.

COMO FUNCIONA

Alguns carros de luxo vem com uma chave extra chamada "valet key".

Essa chave pode ser utilizada quando queremos que um manobrista estacione o carro.

Ao utilizar essa chave para ligar o carro, o manobrista não será capaz de dirigir o carro por mais de 2 km.

Independente da restrição que essa chave especial impõe a seus utilizadores, a ideia é clara: você dá a alguém acesso limitado ao seu carro utilizando uma chave especial e quando quiser acesso ilimitado ao carro, utiliza a chave normal.



PARA QUE SERVE

Análogo a "valet key", para obter acesso limitado a recursos usando o OAuth2, utiliza-se um access token (token de acesso), que permite usufruir recursos de terceiros de forma segura.



TIPOS DE CONCESSÃO DE ACESSO

A TOTVS utilizará no novo serviço de login um dos fluxos propostos pelo framework Oauth2, abaixo a sua especificidade:

  • O Grant Type para autenticação, autorização e permissionamento entre serviços (M2M). O Client é previamente cadastrado e permissionado e o Resource Server declara por meio de seeds seus recursos.



TIPOS DE GARANTIA DE ACESSO

Para o ERP ficar dentro da especificação e ter o escopo adequado, a TOTVS seguirá a implementação de dois tipos de Grant:




a. Client Credentials



Esse tópico aborda a autorização entre serviços (M2M) onde o Client age em seu próprio nome Resource Server.

Figura 1 - Modelo de acesso com Client Credentials


Abaixo estão listados os componentes do desenho acima:

  • IDM: Solução que garante a autenticidade do Resource Owner

  • Oauth Provider: Solução que assume o papel de Oauth Provider e atua como Authorization Server, esse componente tem a responsabilidade de assinar o access_token com chave assimétrica. O Authorization Server consome uma fila de propagação "Role x ClientId" produzida pelo componente RBAC que persisti para possibilitar a geração do access_token auto-contido com as "Roles" do ClientId. O Authorization Server deve verificar a base para invalidação do clientId de modo que o mesmo ao tentar renovar o access_token utilizando seu refresh_token ou autorizar seja invalidado pelo Oauth Provider;

  • RBAC: Esse componente é responsável por gerir as permissões possibilitando termos uma relação de "Role x Grant". A responsabilidade de verificação desse componente é classificada como extremamente crítica. A solução permite que o RBAC tenha consistência eventual delegando a verificação de "Grant x ClientID" para uma camada na aplicação (Resource Server);

  • Resource Server (APP 2): A aplicação que hospeda o recurso tem a responsabilidade de enviar suas Grants para o RBAC via fila. Esse componente também deve consumir a fila de propagação de "Role x Grant" e gravar os dados recebidos para possibilitar a verificação de permissão das "Roles" que estarão auto-contidas no access_token. O Resource Server tem posse da chave pública para a verificação do access_token. Percebe-se que é necessário a construção de uma abstração para as aplicações;

  • Client (APP 1): O Client é o consumidor do recurso e assume o papel de Resource Owner quando o "grant_type" é client_credentials, com isso, o Client precisa das credenciais client_id e client_secret gerados no momento do registro no Oauth Provider. Assumindo que o Client é o próprio Resource Owner não há a necessidade de delegação de acesso.




b.Resource Owner Password Credentials



A proposta aborda a autorização entre usuário Resource Owner e Client. Nesse caso o Client assume o papel de Resource Server, com isso, ele hospeda os recursos.

Figura 2 - Modelo de acesso com Resource Owner Password Credentials


Abaixo estão listados os componentes do desenho acima:



03. EXEMPLO DE UTILIZAÇÃO

a. Otimização das Libs do Datasul

  • Descrever o processo que foi efetuado para a centralização das libs.

b. Configuração baseada no OAuth2

A configuração dos dois tipos de Grant será na tela de Propriedades OAuth2 no produto TOTVS.

Informações

Para a implementação dos dois tipos de GRANT será utilizado o Spring Security.

Com o uso do Spring Security para esse controle, ocorrerá a modificação do uso de libs dentro do produto Datasul.

Atualmente as libs estão duplicadas por arquivos .war, o que gera dificuldade em expedições e manutenções.

Essa modificação consiste em criar uma pasta de libs específica para o Datasul, contendo tudo que é necessário para o produto funcionar com o Tomcat.

Para isso será alterado o arquivo catalina.properties, que buscará a nova pasta e modificará o console para gerar as libs conforme o POM Archive.

Esse POM Archive contém a definição de todas as libs utilizadas pelo sistema e ficará armazenado no controle de libs do Maven.

O serviço de login permitirá as autenticações que já existem atualmente no sistema: LDAP, IDENTITY, PRODUCT. Para o RFI não será utilizado este formato.

Como utilizar o Spring Security para atender OAuth2 Client Credentials

  • Analisar se é necessário descrever aqui sobre a utilização do Spring Security.

c. Client Credentials - Autenticação

ClientCredentials - Authorization Server - Engine autenticação

Implementar a Engine de autenticação do client_id e client_secret e retorno do Token JWT devidamente configurado conforme RFC6749 com a utilização do Spring Security:

  • Autenticação conforme cadastro dos Apps;

  • Retorno do token JWT válido para utilização posterior.

  • Descrever o processo que foi efetuado para Client Autenticação.

d. Client Credentials - Autorização

ClientCredentials - Resource Server - Engine autorização acesso

Implementar a Engine de autorização de acesso conforme Token JWT gerado anteriormente na autenticação:

  • Autorização de acesso caso o token JWT esteja válido;

  • Acesso conforme escopo (scope) previamente definidos.

  • Descrever o processo que foi efetuado para Client Autorização.

e. Resource Owner Password Credentials - Autenticação e Autorização

RO Password Credentials - Engine de Autenticação e autorização

Implementar a Engine de autenticação e autorização de acesso para o modelo Resource Owner Password Credentials:

  • Autenticação realizada com o retorno do Token JWT;

  • Autorização de acesso caso o token JWT esteja válido.

  • Descrever o processo que foi efetuado para RO Autenticação e Autorização.