EventoObtenha 50% de desconto no seu ingresso para MongoDB.local Londres em outubro 2. Use o código WEB50Saiba mais >>
Desenvolvedor MongoDB
Central de desenvolvedor do MongoDBchevron-right
Produtoschevron-right
Atlaschevron-right

Acesso baseado em regras à Atlas Data API

Fuat Sungur11 min read • Published Feb 14, 2023 • Updated Aug 01, 2024
AtlasData API
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
OsAtlas App Services têm amplos recursos de backend sem servidor, como MongoDB Atlas Data API, que simplesmente fornecem um endpoint para o acesso de leitura e gravação em um cluster específico ao qual você pode personalizar o acesso posteriormente. Você pode habilitar a autenticação usando um dos fornecedores de autenticação disponíveis no Atlas App Services. E personalize o acesso a dados na collection, com base nas regras que você pode definir com as regras do App Services.
Nesta publicação do blog, mostrará como expor os dados de uma collection por meio da Atlas Data API a três usuários que estão em três grupos diferentes com permissões diferentes.

Scenario

  • Conjunto de dados: Temos um conjunto de dados simples que inclui filmes e vamos expor os dados do filme por meio da Atlas Data API.
  • Temos três usuários que estão em três grupos diferentes.
    • O grupo 01 tem acesso a todos os campos da collection defilmes no banco de dadossample_mflix e a todos os filmes disponíveis na collection.
    • O grupo 02 tem acesso apenas aos campos title, fullpset, plot e ano na collection defilmes no banco de dadossample_mflix e a todos os filmes disponíveis na collection.
    • O grupo 03 tem acesso apenas aos campos título, enredo completo, enredo e ano na coleção defilmes no bancode dados sample_mflix e aos filmes em que o campoano é maior que 2000.
Três usuários que estão em três grupos geram a mesma solicitação HTTPS
Três usuários fornecidos no cenário acima terão a mesma solicitação de HTTPS, mas receberão um conjunto de resultados diferente com base nas regras definidas em Regras do App Services.

Pré-requisitos

  • Provisione um cluster do Atlas (até mesmo o0 de camada M deve ser suficiente para que o recurso seja testado).
  • Depois de provisionar o cluster, carregue o conjunto de dados de amostra seguindo as etapas.

Etapas para configurar

Veja como você pode começar!

Etapa 1: Criar um aplicativo do App Services

Depois de criar um cluster e carregar o conjunto de dados de amostra, você pode criar um aplicativo nos App Services. Siga as etapas para criar um novo aplicativo do App Services, caso ainda não o tenha feito.
Usei o nome "APITestApplication" e escolhi o cluster "APITestCluster" no qual já carreguei o conjunto de dados de amostra.
Criação de aplicativo de serviços de aplicativos

Etapa 2: Habilite a Atlas Data API

Após criar o aplicativo Atlas App Services, navegue até os HTTPS endpoints no menu do lado esquerdo e clique na aba Atlas Data API , conforme mostrado abaixo.
Habilitando a Data API
Aperte o botão Habilitar Atlas Data API.
Depois disso, você verá que a API de dados foi ativada. Role a página para baixo e encontre as Configurações do usuário. Ative a opçãoCriar usuário após autenticação. Salve -o e, em seguida , implemente -o.
Criando usuário após autenticação
Agora, seu endpoint de API está pronto e acessível. Mas se você testá-lo, receberá o seguinte erro de autenticação, pois nenhum provedor de autenticação foi habilitado.

Etapa 3.1: Habilitar autenticação baseada em JWT

Navegue até a página inicial do aplicativo App Services. Clique emAutenticação no menu do lado esquerdo e clique no botãoEDITAR da linha em que o provedor é Autenticação JWT Personalizada.
JWT (JSON Web Token) fornece uma autenticação baseada em token em que um token é gerado pelo cliente com base em um algoritmo de criptografia e segredo aceito. Depois que o cliente transmite o token, o servidor valida o token com o segredo e o algoritmo de criptografia combinados e, em seguida, processa as solicitações do cliente se o token for válido.
Nas opções de configuração da Autenticação JWT Personalizada, preencha as opções com o seguinte:
  • Ative o provedor de autenticação (oprovedor ativado deve estar ativado).
  • Mantenha o método de verificação como está (Especificar manualmente as chaves de assinatura).
  • Mantenha o algoritmo de assinatura como está (HS256).
  • Adicione uma nova chave de assinatura.
    • Forneça o nome da chave de assinatura.
      • Por exemplo, APITestJWTSigningKEY.
    • Forneça o conteúdo da chave segura (entre 32 e 512 caracteres) e anote-o em algum lugar seguro.
      • Por exemplo, FipTEgYJ6WfUEhCJq3e@pm8-TkE9*UZN.
  • Adicione dois campos nos campos de metadados.
    • O caminho deve ser metadata.group e o campo correspondente deve ser group.
    • O caminho deve ser metadata.name e o campo correspondente deve ser name.
  • Mantenha o campo de público como está (vazio).
Abaixo, você pode encontrar como o formulário Fornecedor de autenticação JWT foi preenchido adequadamente.
Formulário de Autenticação JWT Personalizada
Salve e então Implante.
Depois de implantado, você pode ver o segredo criado nos Valores do Atlas App Services, que podem ser acessados no menu do lado esquerdo clicando em Valores.
Valores e segredos do App Services

Etapa 3.2: Teste de autenticação JWT

Agora, precisamos de um JWT codificado para passá-lo para o App Services Data API para autenticar e, consequentemente, acessar os dados subjacentes.
Você pode ter um serviço de autenticação externa separado que pode fornecer um JWT assinado que você pode usar na Autenticação do App Services. No entanto, para simplificar, geraremos nossos próprios JWTs falsos por meio do jwt.io.
Estas são as etapas para gerar um JWT codificado:
  • Visite jwt.io.
  • No lado direito, na seção Decodificado, podemos preencher os valores. No lado esquerdo, o JWTcodificadocorrespondente será gerado.
  • Na seçãoDecodificado:
    • Mantenha a seçãoHeader igual.
    • Na seçãoPayload , defina os seguintes campos:
      • Sub.
        • Representa o proprietário do token.
        • Forneça valor exclusivo para o usuário.
      • Metadata.
        • Representa informações de metadados sobre este token e pode ser usado para processamento posterior no App Services.
        • Temos dois subcampos aqui.
          • Nome.
            • Representa o nome de usuário do cliente que iniciará a solicitação de API.
            • Essas informações serão usadas como o nome de usuário nos App Services.
          • Grupo.
            • Representa as informações de grupo do cliente que usaremos posteriormente para acesso baseado em regras.
      • Exp.
        • Representa quando o token vai expirar.
        • Forneça um tempo futuro para manter a expiração impossível durante nossos testes.
      • Aud.
        • Representa o nome do aplicativo do App Services que você pode obter da página inicial do seu aplicativo em App Services.
    • Na seção Verificar assinatura:
Abaixo, você pode encontrar como os valores foram preenchidos na seçãoDecodificado e o JWTcodificadocorrespondente que foi gerado.
Um JWT falso
Copie o JWTgerado da seçãoCodificado e passe-o para a seção de cabeçalho da solicitação HTTP, conforme mostrado abaixo.
Recebemos o seguinte erro: "no rule exists for namespace. "Basicamente, não foi possível autenticar no aplicativo. No entanto, como não havia regras de App Services definidas, não foi possível acessar nenhum dado.
Mesmo que a solicitação não seja bem-sucedida devido à definição de regra, você pode conferir a página Usuários do aplicativo para listar os usuários autenticados, conforme mostrado abaixo. user01 era o nome do usuário fornecido no campometadata.name do JSON web token.
Usuários do aplicativo

Etapa 4.1: Criar uma função nas regras do App Services

Até agora, habilitamos a Atlas Data API e a Custom JWT Authentication e podemos autenticar com o nome de usuário01 que está no grupo01. Essas duas informações de metadados (usuário e grupo) foram preenchidas no campo demetadados do JWT. Lembre-se da carga útil do JWT:
Agora, com base no valor do campometadata.group, mostraremos dados de filme filtrados ou não filtrados.
Vamos lembrar as regras que descrevemos no [Cenário]((#scenario):
  • Temos três usuários que estão em três grupos diferentes.
    • O grupo 01 tem acesso a todos os campos da collection defilmes no banco de dadossample_mflix e a todos os filmes disponíveis na collection.
    • O grupo 02 tem acesso apenas aos campos title, fullpset, plot e ano na collection defilmes no banco de dadossample_mflix e a todos os filmes disponíveis na collection.
    • O grupo 03 tem acesso apenas aos campos title, fullpset, plot e ano na collection defilmes no banco de dadossample_mflix e aos filmes em que o campoano é maior que 2000.
Vamos criar uma função que tenha acesso a todos os campos. Esta função será para os usuários que estão no Grupo 01.
  • Navegue até a seçãoRegras no lado esquerdo do menu em App Services.
  • Escolha a collection sample_mflix.movies no lado esquerdo do menu.
  • Clique emIgnorar (Começar do zero) no lado direito do menu, conforme mostrado abaixo.
Uma regra no App Services consiste em funções e filtros
Nome da função: Dê um nome de função adequado. Usaremos fullReadAccess como o nome para essa função. Aplicar quando: Critérios de avaliação desta função. Em outras palavras, representa quando essa função é avaliada. Forneça a condição adequadamente. %%user.data.group corresponde às informaçõesmetadata.group representadas no JSON web token. Configuramos este mapeamento na etapa 3.1. Permissões do documento: atividades permitidas para essa função. Permissões de campo: os campos permitidos são de leitura/escrita para esta função.
Você pode ver abaixo como ele foi preenchido de acordo.
Adicionando uma nova função
Depois de salvar e distribuir, podemos testar o comando curl novamente, conforme mostrado abaixo:
Agora a execução da solicitação HTTPS foi bem-sucedida. Retorna cinco registros com todos os campos disponíveis nos documentos.

Etapa 4.2: Criar outra função nas regras do App Services

Agora adicionaremos outra função que só tem acesso a quatro campos (título, completo, plote ano) na coleção sample_mflix.movies.
É semelhante ao que criamos na etapa 4.1, mas agora definimos quais campos são acessíveis a esta role, conforme mostrado abaixo.
Uma função que tem acesso somente a alguns dos campos
Salve e Implante.
Crie outro JWT para o usuário02 que está no grupo02, conforme mostrado abaixo.
Um JWT falso
Passe o JWT codificado gerado para o comando curl:
Agora o usuário do grupo02 tem acesso apenas aos quatro campos (title, plot, fullplote year), além do campo_id, conforme configuramos na definição de função de uma regra em Regras de Serviços de Aplicativo.

Etapa 4.3: Atualizando uma função e criando um filtro nas Regras do App Services

Agora atualizaremos o papel existente que criamos na etapa 4.2 incluindo ogrupo03 a ser avaliado e adicionaremos um filtro que restringe o acesso somente aos filmes em que o campo doano é maior que 2000.
Atualize a função (inclua grupo03 além do grupo02) que você criou na etapa 4.2 como mostrado abaixo.
Atualizando uma função nas regras do App Services
Agora, os usuários que estão no grupo03 podem autenticar e projetar apenas os quatro campos em vez de todos os campos disponíveis. Mas como podemos colocar uma restrição na filtragem com base no valor do campoano? Precisamos adicionar um filtro.
Navegue até a aba Filtros na página Regras do Atlas App Services depois de escolher a coleçãosample_mflix.movies .
Forneça as seguintes entradas para o Filtro:
Definição de filtro nas regras do App Services
Depois de salvá-lo e implementá-lo, crie um novo JWT para o usuário user03 que está no grupo de grupos03, conforme mostrado abaixo:
Um JWT falso
Copie o JWT codificado e passe-o para o comando curl, conforme mostrado abaixo:
Agora, os membros dogrupo03 receberão os filmes em que as informações doano são maiores que 2000, junto com apenas os quatro campos (title, plot, fullpsete ano), além do campo_id.

Resumo

O MongoDB Atlas App Services oferece funcionalidades amplas para criar seu backend sem servidor. Nesta publicação no blog, examinamos:
  • Como podemos ativar a autenticação JWT personalizada.
    • Como podemos mapear o conteúdo personalizado de um JSON web token para os dados que podem ser consumidos no Atlas App Services — por exemplo, gerenciamento de nomes de usuário e grupos de usuários.
  • Como podemos restringir o acesso aos dados para usuários que têm permissões diferentes.
    • Criamos o seguinte nas regras do App Services:
      • Duas funções para especificar o acesso de leitura em todos os campos e somente nos quatro campos.
      • Um filtro para excluir os filmes em que o campo do ano não é maior que 2000.
Você pode adicionar uma chamada para ação? Talvez direcionar as pessoas para nossos fóruns de desenvolvedores?
Experimente grátis! Provisione uma instância Atlas M0 e crie um novo aplicativo Atlas App Services. Se você estiver travado, deixe-nos ajudá-lo nos fóruns de desenvolvedores.

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Tutorial

Securely Hosting a Lambda Application With a Microservice Architecture and MongoDB Atlas


Sep 19, 2024 | 4 min read
Notícias e Anúncios

Transforme suas habilidades de desenvolvimento de AI com a missão de desenvolvedor RAG to Riches!


Jul 10, 2024 | 1 min read
Tutorial

Primeiro passos na segurança do Atlas Stream Processing


May 17, 2024 | 9 min read
exemplo de código

EHRS-Peru


Sep 11, 2024 | 3 min read
Sumário
  • Scenario