Histórico da Página
CONTEÚDO
Informações | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
|
01.
VISÃO GERALVisão Geral
Disponibilizar um modelo de autenticação e autorização de acesso a recursos (endpoints), que permita abstração e flexibilidade com a utilização de um serviço de login independente (conforme modelo de arquitetura especificado na RFC000010 e RFC000015).
02.
CONCEITOS APLICADOSConceitos Aplicados
OAuth2 é um protocolo que permite aos usuários ter acesso
limitadoa determinados recursos sem precisar expor suas credenciais.
Por isso, serão usados os fluxos de autenticação e autorização baseados no OAuth2.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.
03. Exemplos de Utilização
Dica |
---|
Antes de iniciar a implementação, verifique qual o modelo é o mais adequado para as concessões de acesso, com base no melhor modelo de segurança, Consulte os links: OAuth2 - Client Credentials e OAuth2 - Resource Owner Password Credentials para mais informações. |
Informações |
---|
A seguir serão demonstrados alguns trechos de códigos em JavaScript e TypeScript que exemplificam os conceitos gerais de Autenticação (para gerar o token) e Autorização (validação do token ao requisitar um endpoint). Lembrando que o código deve ser alterado de acordo com a linguagem de programação e regras específicas de segurança. |
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:
Oauth Provider: O mesmo do modelo anterior;
DAC: Esse componente é responsável por gerir as permissões a nível "granular" possibilitando que um usuário possa conceder a permissão para outro usuário;
Resource Server (APP 2): O mesmo do modelo anterior
- Nesse caso o Resource Server também é o Client. O Client gerencia o access_token e o Resource Server faz a verificação com a chave pública;
Resource Owner: Nesse Grant Type o usuário é o responsável pelas ações no Resource Server, logo o mesmo pede uma autorização em seu nome;
- A requisição de autorização é denominada
grant_type=password
onde o usuário passa suas credenciais para um Client do tipo confidencial. O Client por sua vez deve pedir uma autorização ao Oauth Provider e obter o access_token.
- A requisição de autorização é denominada
03. EXEMPLO DE UTILIZAÇÃO
a. Otimização das Libs do Datasul
Expedir as libs de forma centralizada
- 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.