Acesso baseado em regras à Atlas Data API
Avalie esse Tutorial
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.
- 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 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.
- Provisione um cluster do Atlas (até mesmo o0 de camada M deve ser suficiente para que o recurso seja testado).
Veja como você pode começar!
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.
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.
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.
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.
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.
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.
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:
- Forneça o mesmo segredo que você já forneceu ao ativar aautenticação JWT personalizada na etapa 3.1.
Abaixo, você pode encontrar como os valores foram preenchidos na seçãoDecodificado e o JWTcodificadocorrespondente que foi gerado.
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.
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.
- 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.
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.
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.
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.
Salve e Implante.
Crie outro JWT para o usuário02 que está no grupo02, conforme mostrado abaixo.
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.
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.
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:
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:
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.
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.