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
Idiomaschevron-right
Javachevron-right

Proteja sua API com o Spring Data MongoDB e o Microsoft EntraID

Tim Kelly8 min read • Published Apr 02, 2024 • Updated Apr 02, 2024
AzureSpringMongoDBJava
APLICATIVO COMPLETO
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty

Introdução

Bem-vindo ao nosso tutorial prático, onde você aprenderá como construir uma API RESTful com Spring Data MongoDB, fortalecida pela segurança do Microsoft Entra ID e OAuth2. Nesta viagem, guiaremos você pela criação de uma API de lista de tarefas simplificada, mostrando não apenas como configurá-la, mas também como protege-la de forma eficaz.
Este guia foi elaborado para fornecer as ferramentas e o conhecimento necessários para implementar uma API segura e funcional desde o início. Vamos mergulhar de cabeça e começar a construir algo incrível juntos!

Pré-requisitos

Você pode acompanhar este tutorial e construir seu projeto enquanto lê ou pode clonar o repositório diretamente:

Crie nossa API com o Spring Data MongoDB

Quando esses pré-requisitos estiverem em vigor, estamos prontos para começar a configurar nossa API RESTful segura do Spring Boot. Nosso primeiro passo será lançar a base com application.properties.
  • spring.application.name=todoDefine o nome do seu aplicativo Spring Boot
  • spring.cloud.azure.active-directory...: Integra seu aplicativo com o Azure AD para autenticação e autorização
  • spring.security.oauth2.client.registration.azure.client-authentication-method=none: especifica o método de autenticação para o cliente OAuth2 ; defini-lo como none é usado para clientes públicos, onde o segredo do cliente não é aplicável
  • spring.security.oauth2.resourceserver.jwt.issuer-uri=https://login.microsoftonline.com/<YOUR-TENANT-ID/v2.0: Configura seu aplicativo como um servidor de recursos OAuth2 , validando tokens JWT emitidos pelo Azure AD
  • server.forward-headers-strategy=framework: Configura como seu aplicativo lida com cabeçalhos encaminhados, o que é importante para aplicativos atrás de proxies ou balancers de carga, especialmente no que diz respeito à construção de URLs corretos para redirecionamentos
  • springdoc.swagger-ui...: Configure a interface do usuário do Swagger, permitindo especificamente que ela seja executada no caminho raiz e use oProof Key for Code Exchange (PKCE) com a concessão do código de autorização OAuth2
Crie um pacote chamado model e adicione a classe Todo. Aqui, teremos nosso POJO que mapeia para nossos documentos em nosso MongoDB database.
Crie um pacote separado chamado repository com a interface TodoRepository. Para facilitar nossa vida, vamos usar o MongoRepository. Isso nos permitirá usar as CRUD em nosso MongoDB database sem precisar configurar todo o nosso código boilerplate.
Em seguida, crie um pacoteservice e uma classe TodoService. Isso conterá nossa lógica de negócios para nosso aplicativo.
Para estabelecer seus endpoints de API, crie um pacotecontroller e uma classeTodoController . Há algumas coisas acontecendo aqui. Para cada um dos pontos de extremidade da API aos quais queremos restringir o acesso, usamos @PreAuthorize("hasAuthority('SCOPE_Todo.<SCOPE>')") onde <SCOPE> corresponde aos escopos que definiremos no Microsoft Entra ID.
Também desativamos o CORS aqui. Em um aplicativo de produção, você desejará especificar quem pode acessar isso e provavelmente não apenas permitir todos, mas isso é bom para este tutorial.
Agora, precisamos configurar nossa interface do usuário do Swagger para nosso aplicativo. Crie um pacoteconfig e uma classeOpenApiConfiguration. Muito disso é clichê, com base nos aplicativos de demonstração fornecidos pela springdoc.org. Estamos configurando um fluxo de autorização e especificando os escopos disponíveis em nosso aplicativo. Vamos criá-los em uma parte posterior deste aplicativo, mas preste atenção ao nome da API ao definir escopos (.addString("api://todo/Todo.User", "Access todo as a user"). Você tem a opção de configurar isso mais tarde, mas precisa ser o mesmo no aplicativo e na ID do Microsoft Entra.
A última coisa que precisamos fazer é criar uma classeWebConfig em nosso pacote config . Aqui, só precisamos desabilitaro Cross-Site Request Forgery (CSRF).
Ao usar o OAuth para autenticação em um aplicativo da Web, a necessidade de tokens CSRF depende do contexto específico do seu aplicativo e de como o OAuth está sendo implementado.
Em nosso aplicativo, estamos usando um aplicativo de página única (SPAs) para interagir com nossa API. OAuth é frequentemente usado com tokens (como JWTs) obtidos por meio do fluxo de código de autorização OAuth com PKCE, portanto o CSRF não é necessário. Se o seu aplicativo ainda usar cookies (acesso à web tradicional) para manter o estado da sessão após o fluxo OAuth, implemente tokens CSRF para se proteger contra ataques CSRF. Para uma API que atende a um SPA, dependeremos de tokens de portador.

Exponha suas APIs RESTful no ID da Microsoft Entra

É hora de registrar um novo aplicativo com o Microsoft Entra ID (anteriormente conhecido como Azure Active Directory) e preparar tudo para proteger nossa API RESTful com autenticação e autorização OAuth2 . O Microsoft Entra ID é uma solução abrangente de gerenciamento de identidade e acesso (IAM) fornecida pela Microsoft. Ele abrange vários serviços projetados para ajudar a gerenciar e proteger o acesso a aplicativos, serviços e recursos na nuvem e em ambientes locais.
  1. Inicie sessão no portal do Azure. Se você tiver acesso a vários locatários, selecione o locatário no qual deseja registrar um aplicativo.
  2. Procure e selecione o serviçoMicrosoft Entra ID.
    • Se ainda não tiver um, crie um aqui.
  3. No menu do lado esquerdo, em Manage (Gerenciar), selecione App registrations (Registros de aplicativos ) e New registration (Novo registro).
  4. Insira um nome para o seu aplicativo no campoNome. Para este tutorial, vamos ficar com o exemplo clássico de CRUD, uma API de lista de tarefas, então a chamaremos de TodoAPI.
  5. Para Tipos de contas com suporte, selecione Contas em qualquer diretório organizacional (Qualquer diretório Microsoft Entra – Multitenant) e contas pessoais da Microsoft. Isso permitirá o conjunto mais amplo de entidades da Microsoft.
  6. Selecione Registrar para criar o aplicativo.
  7. Na páginaVisão geraldo aplicativo, procure o valor deID do aplicativo (cliente) e registre-o para uso posterior. Você precisa dele para configurar o arquivoapplication.properties para esse aplicativo.
  8. Navegue até Gerenciar e clique em Expor uma API. Localize o URI do ID do aplicativo na parte superior da página e clique em Adicionar.
  9. Na telaEditar URI do ID do aplicativo, é necessário gerar um URI de ID do aplicativo distinto. Opte pelo padrão fornecido api://{client ID} ou escolha um nome descritivo como api://todo antes de clicar em Salvar.
  10. Go para Manage (Gerenciar), clique em Expose an API (Expor uma API), depois em Add a scope (Adicionar um escopo) e forneça os detalhes especificados:
    • Em Nome do escopo, insira ToDo.User.
    • Para Quem pode autorizar, selecione Administradores e usuários.
    • Para o nome de exibição do consentimento do administrador, digite Create and edit ToDo data (Criar e editar dados de tarefas).
    • Para Descrição de autorização do administrador, insira Permite que usuários autenticados criem e editem os dados do ToDo.
    • Para o State, mantenha-o ativado.
    • Selecione Adicionar escopo.
  11. Repita as etapas anteriores para adicionar os outros escopos: ToDo.Admin, que concederá ao usuário autenticado permissão para excluir. Agora que criamos nosso aplicativo e configuramos nosso EntraID, vamos ver como solicitar nosso token de acesso. Neste ponto, você pode carregar sua API para os aplicativos do Azure Spring, seguindo nosso tutorial deIntrodução aos aplicativos do Azure Spring e ao MongoDB Atlas, mas manteremos tudo em execução local para este tutorial.

Conceder acesso ao nosso cliente com o Swagger

As API RESTful servem como um servidor de recursos, protegido pelo Microsoft ID. Para obter um token de acesso, é necessário registrar um aplicativo diferente no Microsoft Entra ID e atribuir permissões ao aplicativo cliente.

Registre o aplicativo cliente

Vamos registrar um segundo aplicativo no ID Microsoft Entra.
  1. Repita as etapas 1 a 6 acima, mas desta vez, nomeie seu aplicativo como TodoClient.
  2. Na páginaVisão geraldo aplicativo, procure o valor de ID do aplicativo (cliente). Registre para uso posterior. Você precisa dele para adquirir um token de acesso.
  3. Selecione Permissões de API e Adicione uma permissão.
  4. Em My APIs, selecione o aplicativoTodoAPI que você registrou anteriormente. Escolha as permissões que seu aplicativo cliente precisa para operar corretamente. Nesse caso, selecione as permissõesToDo.Admin e ToDo.User. Confirme sua seleção clicando em Adicionar permissões para aplicá-las ao seu aplicativoTodoClient.
  5. Selecione Conceder consentimento de administrador para <YOUR-TENANT-NAME> para conceder consentimento de administrador para as permissões que você adicionou.

Adicione um usuário.

Agora que temos a API criada e o aplicativo cliente registrado, é hora de criar nosso usuário para conceder permissão. Vamos criar um membro em nosso locatário do Microsoft Entra para interagir com nosso TodoAPI.
  1. Navegue até seu ID Microsoft Entra e em Gerenciar, escolha Usuários.
  2. Clique em Novo usuário e depois em Criar novo usuário.
  3. Na seção Criar novo usuário, preencha Nome principal do usuário , Nomedeexibiçãoe Senha. O usuário precisará alterar isso após o primeiro login.
  4. Clique emRevisar + criar para examinar suas entradas. Pressione Criar para finalizar a criação do usuário.

Atualizar a configuração do OAuth2 para autorização da UI do MongoDB

Para conectar nosso aplicativo para este tutorial, usaremos o Swagger. Precisamos atualizar as configurações do OAuth2 para autorizar os usuários na interface do usuário do Swagger, permitindo que eles obtenham tokens de acesso por meio do aplicativoTodoClient.
  1. Acesse seu locatário do Microsoft Entra ID e navegue até o aplicativoTodoClient que você registrou.
  2. Clique em Gerenciar, depois em Autenticação, escolha Adicionar uma plataformae selecione Aplicativo de página única. Para fluxos híbridos e de concessão implícita, escolha tokens de acesso e tokens de ID.
  3. Na seção Redirecionar URIs, insira o URL ou ponto de extremidade do seu aplicativo seguido de /swagger-ui/oauth2-redirect.html como o URL de redirecionamento OAuth2 e clique em Configurar.

Faça login no seu aplicativo

Navegue até a URL publicada do aplicativo e clique em Autorizar para iniciar o2 processo de autenticação OAuth . Na caixa de diálogo Autorizações disponíveis , insira TodoClient o ID do cliente do aplicativo na caixaclient_id , marque todas as opções no campoEscopos , deixe a caixa client_secret vazia e clique em Autorizar para prosseguir para a página de login do Microsoft Entra. Depois de entrar com o usuário mencionado anteriormente, você retornará à caixa de diálogo Autorizações disponíveis . Voila! Você deve ser saudado com sua tela de login bem-sucedida .
Tela de autorização do Swagger
Agora, devemos estar prontos para testar alguns de nossos endpoints seguros. Envie uma solicitação de postagem de amostra usando a interface do usuário do Swagger.
Exemplo de solicitação de postagem
Se tudo estiver autorizado corretamente, seus dados agora devem estar em seu MongoDB database.

Resumo

E aqui está: uma viagem desde os fundamentos da configuração de um ambiente MongoDB e Azure, passando pela criação de uma API RESTful segura com Spring Boot, até os testes com a UI do MongoDB. Este guia teve como objetivo armar você com as ferramentas para criar uma API de lista de tarefas robusta e segura, demonstrando o poder de combinar o Spring Data MongoDB com os recursos de segurança do Microsoft Entra ID e OAuth2.
Ao acompanhar, você viu como registrar e configurar seu aplicativo e cliente no Microsoft Entra ID, definir as permissões necessárias e até mesmo como configurar os usuários para interagir com sua API. Seus dados agora residem com segurança no MongoDB, acessados por meio de uma API cuidadosamente construída que respeita os padrões de segurança modernos.
Se você encontrou este tutorial útil ou interessante, confira o Centro do Desenvolvedor. Aprenda a hospedar a API que você acabou de criar nos aplicativos do Azure Spring em Introdução aos aplicativos do Azure Spring e ao MongoDB Atlas, ou leia mais sobre a proteção de dados com Como implementar a criptografia em nível de campo do lado do cliente (CSFLE) em Java com o Spring Data MongoDB.
Você está pronto para começar a construir com Atlas no Azure? Comece hoje mesmo gratuitamente a usar oMongoDB Atlas no Azure Marketplace
Principais comentários nos fóruns
Ainda não há comentários sobre este artigo.
Iniciar a conversa

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

Como criar um serviço de pesquisa em Java


Apr 23, 2024 | 11 min read
Tutorial

Desbloqueando a pesquisa semântica: crie um mecanismo de pesquisa de filmes baseado em Java com o Atlas Vector Search e o Spring Boot


Sep 18, 2024 | 10 min read
exemplo de código

Inicialização reativa do Java Spring com MongoDB


Apr 02, 2024 | 5 min read
Artigo

Orquestração do MongoDB com o Spring e Atlas Kubernetes Operator


Jun 12, 2024 | 13 min read
Sumário