As APIs desempenham um papel fundamental na conectividade entre aplicações, mas também são vulneráveis a ataques. No passado, com aplicações monolíticas, havia apenas um ponto de entrada a ser protegido. Em arquiteturas de microsserviços, uma única aplicação geralmente é composta por vários microsserviços conectados por meio de APIs, e cada uma dessas APIs pode ter centenas de endpoints. Isso torna enorme a superfície potencial de ataque das APIs, pois cada nova API cria um ponto de entrada no seu perímetro de segurança.
Há muitas estratégias para proteger suas APIs. Uma das mais fundamentais é o controle de acesso. Em termos simples, você precisa verificar a identidade do usuário (autenticação, ou AuthN) e confirmar se ele pode acessar determinados recursos (autorização, ou AuthZ). A implementação do OpenID Connect (OIDC) é uma das abordagens de controle de acesso mais comuns usadas em APIs. Você pode colocá-lo em funcionamento em poucos minutos com o API Connectivity Manager, que faz parte do F5 NGINX Management Suite.
Neste tutorial, você aprenderá a executar a etapa de autorização do fluxo de trabalho do OIDC configurando a validação de JSON Web Token (JWT) com o API Connectivity Manager e o Azure Active Directory (Azure AD).
O que é o OpenID Connect?
OpenID Connect (OIDC) é um protocolo de identidade desenvolvido com base no protocolo OAuth 2.0. O OIDC permite que os clientes verifiquem a identidade do usuário final ou dispositivo. Essa é uma das partes do controle de acesso, que inclui autenticação e autorização:
- Autenticação verifica se um usuário ou dispositivo é quem afirma ser
- Autorização determina o que um usuário ou dispositivo verificado pode acessar
Há muitas implementações diferentes de OIDC, incluindo o Azure AD, que você usará neste tutorial. Como alternativa, você pode usar outras soluções de OIDC, como F5 BIG-IP Access Policy Manager (APM), Okta, Auth0, Ping Identity e outras, com o API Connectivity Manager.
O que você precisa para começar
Certifique-se de que você atende aos seguintes pré-requisitos:
- API Connectivity Manager instalado e configurado em seu ambiente
- Uma conta ativa do Microsoft Azure account
- Um cliente REST (Postman é usado neste tutorial)
Você pode se inscrever para uma avaliação gratuita de 30 dias do NGINX Management Suite caso precise acessar o API Connectivity Manager.
Criar um aplicativo do Azure AD
Abra um navegador e entre no seu Portal do Azure.
Clique em Registros de aplicativo no menu à esquerda.

Figura 1: Página inicial do portal do Azure AD
Clique no botão Novo registro.

Figura 2: Registro de aplicativo no Azure AD
Para criar um novo aplicativo, forneça um nome, um URI de redirecionamento e clique no botão Registrar. Nesta demonstração, você usará o Postman, portanto, utilizará o URI de redirecionamento OIDC do Postman.

Figura 3: Criar um novo aplicativo do Azure AD
Agora que seu aplicativo foi criado, você precisa criar escopos OAuth para fornecer acesso à API. Clique no link Expor uma API no menu à esquerda.

Figura 4: Expor uma API
Clique em Adicionar um escopo.

Figura 5: Adicionar um escopo
Aceite o URI de ID do aplicativo padrão ou crie o seu próprio e clique no botão Salvar e continuar. Se quiser criar seu próprio URI de ID do aplicativo, você deverá registrar o domínio desejado no Azure AD.

Figura 6: URL do ID do aplicativo
Para esta demonstração, seu escopo é baseado em um exemplo da Microsoft. Preencha o formulário com as informações a seguir e clique no botão Adicionar escopo:
Nome do escopo: Employees.Read.All
Quem pode consentir?: Administradores e usuários
Nome de exibição do consentimento do administrador: Acesso somente leitura aos registros de funcionários
Descrição do consentimento do administrador: Permitir acesso somente leitura a todos os dados de funcionários.
Nome de exibição do consentimento do usuário: Acesso somente leitura aos seus registros de funcionário
Descrição do consentimento do usuário: Permitir acesso somente leitura aos seus dados de funcionário.

Figura 7: Adicionar um escopo
Em seguida, você precisa autorizar o aplicativo cliente. Para isso, obtenha a ID do cliente. Clique no link Visão geral no menu à esquerda e copie a ID do aplicativo (cliente).

Figura 8: ID do cliente da aplicação
Clique novamente no link Expor uma API, depois clique no botão Adicionar um aplicativo cliente.

Figura 9: Adicionar um aplicativo cliente
Cole o ID do cliente do aplicativo no campo ID do cliente e marque a caixa de seleção ao lado do URI do ID do aplicativo. Em seguida, clique no botão Adicionar aplicativo.

Figura 10: Adicionar um aplicativo cliente
Em seguida, nesta demonstração, você usará um código de autorização com o Fluxo de Código de Autorização, portanto, será necessário um segredo do cliente para o Postman. Clique no link Certificados e segredos no menu à esquerda e, depois, clique no botão Novo segredo do cliente.

Figura 11: Novo segredo do cliente
Dê um nome ao seu segredo e mantenha o tempo de expiração padrão.

Figura 12: Nome secreto
Em seguida, copie o segredo do cliente e armazene-o em um cofre de senhas para poder usá-lo mais tarde.

Figura 13: Segredo do cliente
Configurar a asserção JWT no API Connectivity Manager
Agora que você configurou seu aplicativo do Azure AD, pode configurar o cluster de gateways de API no API Connectivity Manager para realizar a asserção de JSON Web Token para o serviço definido. Nesta etapa, você precisará determinar o URI dos conjuntos de chaves Web JSON (JWK) do seu locatário do Azure AD.
Você pode obter o URI do JWKS no endpoint conhecido do locatário do Azure AD:
https://login.microsoftonline.com/<tenant-id>/v2.0/.well-known/openid-configuration
Esta página fornecerá um payload JSON que contém a chave jwks_uri. Você precisará copiar o valor dela.

Figura 14: endpoint conhecido do locatário do Azure AD
Agora que você tem o URI do JWKS, abra o console do API Connectivity Manager e acesse a configuração do proxy de serviço. Clique em Adicionar política para a política de Asserção de JSON Web Token.

Figura 15: Políticas de proxy do serviço de gateway
Em seguida, cole o URI JKWS do seu locatário do Azure AD no campo Local do URI, depois clique no botão Adicionar.

Figura 16: Política de asserção de JSON Web Token
Clique no botão Salvar e publicar para implantar esta política no cluster do gateway de API.

Figura 17: Política do Gateway de Serviço
Pronto! Sua instância do API Connectivity Manager agora está configurada para realizar a asserção JWT no gateway de serviço configurado.
Testando com o Postman
Agora, é hora de testar sua configuração e garantir que ela funcione conforme o esperado. Para começar, você precisará obter algumas informações do seu aplicativo do Azure AD:
- Segredo do cliente do aplicativo (você o salvou anteriormente)
- Escopo do OAuth
- Endpoint de autorização OAuth
- Endpoint de token OAuth
Para obter o escopo do OAuth, abra o portal do Azure e volte para a página de registro do seu aplicativo. Em seguida, clique no link Expor uma API no menu à esquerda e clique no ícone Copiar do seu escopo. Salve esse valor para usá-lo daqui a alguns minutos.

Figura 18: Escopos da API
Para obter os endpoints de autorização e de token do OAuth, clique no link Visão geral no menu à esquerda e, em seguida, clique no botão Endpoints. Depois disso, copie os URIs dos endpoints de autorização e de token.

Figura 19: Endpoints do aplicativo Azure AD

Figura 20: URLs dos endpoints do aplicativo Azure AD
Abra o Postman e clique no menu Environments. Em seguida, clique no link Create Environment.

Figura 21: Criar ambiente no Postman
Dê um nome ao seu ambiente e adicione seis variáveis com os valores (salvos nas etapas anteriores) nas colunas Valor inicial e Valor atual, depois clique no botão Salvar.
- client_id: ID do cliente do aplicativo do Azure AD
- client_secret:segredo do cliente do aplicativo do Azure AD
- auth_url: URL de autorização OAuth do locatário do Azure AD
- token_url: URL do token OAuth do locatário do Azure AD
- tenant_id: ID do diretório (locatário) do Azure AD
- escopo: escopo da API do aplicativo do Azure AD com a URL da ID do aplicativo

Figura 22: Variáveis de ambiente do Postman
Abra uma nova aba no Postman e siga estas etapas:
- Altere seu ambiente para ACM no canto superior direito
- Adicione a URL da sua API à barra de endereços
- Clique na aba Autenticação tab
- Altere o Tipo para OAuth 2.0
- Role para baixo na configuração de autenticação e defina as seguintes variáveis:
- URL de autenticação: {{auth_url}}
- URL do token de acesso: {{token_url}}
- ID do cliente: {{client_id}}
- Segredo do cliente: {{client_secret}}
- Clique no botão Obter novo token de acesso button

Figura 23: Requisição no Postman

Figura 24: Configuração de autenticação do Postman
Uma janela do navegador será aberta, e você deverá entrar com suas credenciais do Azure AD. Após a autenticação bem-sucedida, você será redirecionado de volta ao Postman, e a janela a seguir será exibida. Clique no botão Usar token.

Figura 25: Usar token no Postman
Agora que você tem seu token de acesso OAuth, finalmente pode fazer sua chamada à API. Clique no botão Salvar e depois clique no botão Enviar.
Se tudo estiver configurado corretamente, você deverá ver uma resposta 200 OK.

Figura 26: Requisição bem-sucedida no Postman
Conclusão
Agora, o API Connectivity Manager está protegendo suas APIs com tokens de acesso OAuth do Azure AD. As próximas etapas seriam adicionar outros escopos OAuth e configurar o cluster de gateway de API no API Connectivity Manager para repassar esses escopos às suas APIs protegidas — mas isso é assunto para outro post!
Comece hoje mesmo
Inicie uma avaliação gratuita de 30 dias do NGINX Management Suite, que inclui o API Connectivity Manager e o Instance Manager.
Uma versão deste artigo foi publicada originalmente em codygreen.com. Ela foi editada e republicada aqui com a autorização do autor.
Sobre o autor
Publicações relacionadas no blog

Como o F5 NGINX One aprimora o gerenciamento e a observabilidade
Descubra como o F5 NGINX One aprimora o gerenciamento e a observabilidade de ambientes híbridos e multicloud ao oferecer um console web centralizado baseado em SaaS, com insights em tempo real, conformidade automatizada e gerenciamento simplificado de configurações.

Do OpenAPI ao NGINX como gateway de API usando uma API declarativa
Descubra como transformar uma definição de esquema OpenAPI em uma configuração NGINX totalmente funcional, operando como um API Gateway com a segurança de um Web Application Firewall e um Portal do Desenvolvedor, usando uma abordagem declarativa de API.

Como gerenciar picos repentinos de tráfego e sobrecarga do servidor
Picos de tráfego e sobrecarga de servidores são preocupações sérias para varejistas online em qualquer época, mas especialmente durante a “Cyber Season” de compras de fim de ano. Detalhamos como você pode aproveitar as soluções de entrega de aplicações de nível de produção da NGINX para se preparar para aumentos repentinos de tráfego.

Distribuição segura de chaves privadas SSL com o NGINX
Descrevemos três maneiras progressivamente mais seguras de proteger chaves privadas SSL ao configurar o NGINX para processar tráfego HTTPS: permitir acesso de leitura apenas ao usuário root, criptografar as chaves com senhas armazenadas separadamente e distribuir as senhas a partir de um repositório central.
Agrupando solicitações de API em lotes com NGINX Plus e o módulo JavaScript do NGINX
O módulo JavaScript do NGINX lançado com o NGINX Plus R15 oferece suporte a subsolicitações, possibilitando uma classe totalmente nova de casos de uso para o NGINX Plus. Este exemplo completo também usa a API do NGINX Plus e os módulos de chave-valor para converter solicitações de API dos clientes em solicitações separadas para as APIs dos microsserviços que compõem um aplicativo.
Como superar o esgotamento de portas efêmeras no NGINX e no NGINX Plus
Confira dicas para evitar o esgotamento de portas efêmeras com ajustes no kernel do Linux, conexões keepalive e conexões vinculadas dinamicamente a endereços IP locais.