Árvore de páginas

Versões comparadas

Chave

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

CONTEÚDO

  • Visão geral
  • Conceitos Aplicados
  • Exemplo de utilização
    1. Otimização das Libs do Datasul
    2. Configuração baseada no OAuth2
    3. Client Credentials - Autenticação
    4. Client Credentials - Autorização
    5. Resource Owner Password Credentials - Autenticação e Autorização
  • Assuntos relacionados
    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.