Proteja sua API com o Spring Data MongoDB e o Microsoft EntraID
Avalie esse Tutorial
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!
- Java Development Kit (JDK) versão 17 ou superior
- Um aplicativo Spring Boot — você pode criar um projeto Maven com o Spring Initializr; há algumas dependências que você precisará:
- Spring Web
- Servidor de recursos OAuth2
- Azure Active Directory
- Selecione a versão 17 ou superior do Java e gere um JAR
Você pode acompanhar este tutorial e construir seu projeto enquanto lê ou pode clonar o repositório diretamente:
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=todo
Define o nome do seu aplicativo Spring Bootspring.cloud.azure.active-directory...
: Integra seu aplicativo com o Azure AD para autenticação e autorizaçãospring.security.oauth2.client.registration.azure.client-authentication-method=none
: especifica o método de autenticação para o cliente OAuth2 ; defini-lo comonone
é usado para clientes públicos, onde o segredo do cliente não é aplicávelspring.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 ADserver.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 redirecionamentosspringdoc.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 pacote
service
e uma classe TodoService. Isso conterá nossa lógica de negócios para nosso aplicativo.Para estabelecer seus endpoints de API, crie um pacote
controller
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 pacote
config
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.
É 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.
- 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.
- Procure e selecione o serviçoMicrosoft Entra ID.
- Se ainda não tiver um, crie um aqui.
- No menu do lado esquerdo, em Manage (Gerenciar), selecione App registrations (Registros de aplicativos ) e New registration (Novo registro).
- 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
. - 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.
- Selecione Registrar para criar o aplicativo.
- 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 arquivo
application.properties
para esse aplicativo. - 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.
- 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 comoapi://todo
antes de clicar em Salvar. - 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.
- 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.
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.
Vamos registrar um segundo aplicativo no ID Microsoft Entra.
- Repita as etapas 1 a 6 acima, mas desta vez, nomeie seu aplicativo como
TodoClient
. - 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.
- Selecione Permissões de API e Adicione uma permissão.
- Em My APIs, selecione o aplicativo
TodoAPI
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
. - Selecione Conceder consentimento de administrador para
<YOUR-TENANT-NAME>
para conceder consentimento de administrador para as permissões que você adicionou.
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
.- Navegue até seu ID Microsoft Entra e em Gerenciar, escolha Usuários.
- Clique em Novo usuário e depois em Criar novo usuário.
- 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.
- Clique emRevisar + criar para examinar suas entradas. Pressione Criar para finalizar a criação do usuário.
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 aplicativo
TodoClient
.- Acesse seu locatário do Microsoft Entra ID e navegue até o aplicativo
TodoClient
que você registrou. - 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.
- 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.
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 .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.
Se tudo estiver autorizado corretamente, seus dados agora devem estar em seu MongoDB database.
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.