Usando Apache APISIX e Authing para Implementar Gerenciamento Centralizado de Autenticação

API7.ai

January 4, 2022

Ecosystem

Introdução

Sobre o Apache APISIX

Apache APISIX é um gateway de API dinâmico, em tempo real e de alto desempenho que oferece recursos avançados de gerenciamento de tráfego, como balanceamento de carga, upstream dinâmico, lançamento canário, fusão de serviços, autenticação, observabilidade, etc. O Apache APISIX não apenas suporta mudanças dinâmicas de plug-ins e hot-plugging, mas também possui uma variedade de plug-ins úteis. O Plug-in OpenID Connect para Apache APISIX, com suporte ao protocolo OpenID Connect, permite que os usuários utilizem este plug-in para integrar o Apache APISIX com os serviços da Authing e implantá-lo como um gateway de autenticação centralizado em empresas.

Sobre a Authing

Authing é o primeiro produto de nuvem de identidade focado em desenvolvedores na China, integrando todos os principais protocolos de identidade e fornecendo serviços completos e seguros de autenticação e gerenciamento de acesso para empresas e desenvolvedores. Com "API First" como a base do produto, todas as funções comuns no campo de identidade são encapsuladas modularmente, e todas as capacidades são disponibilizadas aos desenvolvedores por meio de SDKs de linguagem de programação de cenário completo. Ao mesmo tempo, os usuários podem usar de forma flexível as APIs RESTful abertas da Authing para expansão de funcionalidades, atendendo às necessidades de gerenciamento de identidade de diferentes empresas em diversos cenários de negócios.

O que é Autenticação Centralizada

Modo Tradicional de Autenticação

No modo tradicional de autenticação, cada serviço de aplicação back-end precisa desenvolver funções separadas para suportar a funcionalidade de autenticação, como interagir com o provedor de identidade e obter as informações de identidade do usuário.

fluxo de trabalho de autenticação tradicional

Modo de Autenticação de Identidade Centralizada

Diferente do modo tradicional de autenticação, o modo de autenticação centralizada remove a autenticação do usuário do serviço de aplicação. Tomando o Apache APISIX como exemplo, o processo de autenticação centralizada é mostrado na figura acima: primeiro, o usuário inicia uma solicitação, e então o gateway frontal é responsável pelo processo de autenticação do usuário, interagindo com o provedor de identidade e enviando uma solicitação de autorização ao provedor de identidade. O provedor de identidade retorna as informações do usuário. Após o gateway completar a identificação do usuário, ele encaminha as informações de identidade do usuário para a aplicação back-end na forma de um cabeçalho de solicitação.

fluxo de trabalho do modo de autenticação centralizada

Vantagens do Modo de Autenticação de Identidade Centralizada

Comparado ao modo tradicional de autenticação, o modo de autenticação centralizada oferece as seguintes vantagens.

  1. Simplifica o processo de desenvolvimento de aplicações, reduzindo a carga de trabalho de desenvolvimento e os custos de manutenção, evitando a repetição do desenvolvimento de lógica de autenticação para cada aplicação.
  2. Melhora a segurança do negócio, pois o modo de autenticação centralizada no nível do gateway pode interceptar solicitações não autenticadas a tempo de proteger as aplicações back-end.

Ao mesmo tempo, combinado com as poderosas funções de gerenciamento de autenticação da Authing, as seguintes funcionalidades podem ser alcançadas.

  1. Gerenciamento do ciclo de vida dos serviços de autenticação por meio do console, incluindo criação, ativação, desativação, etc.
  2. Monitoramento visual e em tempo real das aplicações, incluindo: número de solicitações de interface, latência de chamadas de interface e informações de erro de interface, com notificações de alarme em tempo real.
  3. Registro centralizado para visualizar facilmente logins, logouts e informações sobre ajustes e modificações na aplicação.

Mais detalhes podem ser encontrados em Authing Access Gateway.

Como implementar Autenticação de Identidade Centralizada usando Apache APISIX e Authing

Passo 1: Configurar a Authing

  1. Faça login na sua conta Authing, selecione "Build your own app" e preencha o nome da aplicação e o endereço de autenticação. Se você não tiver uma conta Authing, visite Authing, clique em "Login/Registrar" no canto superior direito para registrar uma conta Authing. Configurar Authing
  2. Clique em "Criar" para criar uma aplicação Authing. Criando uma aplicação Authing
  3. Durante o processo de autenticação, a Authing rejeitará URLs de callback que não sejam as configuradas. Como este é um teste local, a URL de callback de login e a URL de callback de logout são ambas definidas como o endereço de acesso do APISIX http://127.0.0.1:9080/. Definir a URL para login e logout
  4. Criar usuário (opcional). Na página de lista de usuários, crie um usuário com a conta e senha user1/user1, e você pode definir se permite o acesso à aplicação na página "Informações do Usuário - Gerenciamento de Autorização" (o padrão é permitir). Criar Usuário
  5. Visite a página da aplicação para a seguinte configuração, que é necessária ao configurar o OpenID Connect do Apache APISIX.
    1. App ID: ID do cliente OAuth, ou seja, o ID da aplicação, correspondente a client_id e {YOUR_CLIENT_ID} abaixo.
    2. App secret: Segredo do cliente OAuth, ou seja, a chave da aplicação. Corresponde a client_secret e {YOUR_CLIENT_SECRET} abaixo.
    3. Service_discovery_address: O endereço de descoberta de serviço da aplicação. Corresponde a {YOUR_DISCOVERY} abaixo. configurações

Passo 2: Instalar o Apache APISIX

Você pode instalar o Apache APISIX de várias maneiras, incluindo pacotes de origem, Docker, Helm Chart, etc.

Instalar dependências

O ambiente de execução do Apache APISIX requer dependências do NGINX e etcd.

Antes de instalar o Apache APISIX, instale as dependências de acordo com o sistema operacional que você está usando. Fornecemos instruções de instalação de dependências para CentOS7, Fedora 31 e 32, Ubuntu 16.04 e 18.04, Debian 9 e 10, e macOS. Consulte Instalar Dependências para mais detalhes.

Instalação via Pacote RPM (CentOS 7)

Este método de instalação é adequado para CentOS 7; execute o seguinte comando para instalar o Apache APISIX.

sudo yum install -y https://github.com/apache/apisix/releases/download/2.7/apisix-2.7-0.x86_64.rpm

Instalação via Docker

Consulte Instalando Apache APISIX com Docker.

Instalação via Helm Chart

Consulte Instalando Apache APISIX com Helm Chart.

Instalação via pacote de origem

  1. Crie um diretório chamado apisix-2.7.
mkdir apisix-2.7
  1. Baixe o pacote de origem do Apache APISIX Release.
wget https://downloads.apache.org/apisix/2.7/apache-apisix-2.7-src.tgz

Você também pode baixar o pacote de origem do Apache APISIX Release no site do Apache APISIX. A Página de Download do Site Oficial do Apache APISIX também fornece pacotes de origem para Apache APISIX, APISIX Dashboard e APISIX Ingress Controller.

  1. Extraia o pacote de origem do Apache APISIX Release.
tar zxvf apache-apisix-2.7-src.tgz -C apisix-2.7
  1. Instale as bibliotecas Lua necessárias para execução.
# Mude para o diretório apisix-2.7
cd apisix-2.7
# Crie as dependências
make deps

Inicializando Dependências

Execute o seguinte comando para inicializar o arquivo de configuração do NGINX e o etcd.

# inicialize o arquivo de configuração do NGINX e o etcd
make init

Passo 3: Iniciar o Apache APISIX e configurar a rota

  1. Execute o seguinte comando para iniciar o Apache APISIX.

    apisix start
    
  2. Crie rotas e configure o plug-in OpenID Connect. A lista de configurações do OpenID Connect é a seguinte.

CampoValor PadrãoDescrição
client_idN/AID do cliente OAuth
client_secretN/ASegredo do cliente OAuth
discoveryN/AEndpoints de descoberta de serviço para provedores de identidade
scopeopenidEscopo de recursos que precisa acessar
relmapisixEspecifica as informações de autenticação no cabeçalho de resposta WWW-Authenticate
bearer_onlyfalseSe deve verificar o token no cabeçalho da solicitação
logout_path/logoutURI de logout
redirect_urirequest_uriO URI para o qual o provedor de identidade redireciona, por padrão o endereço da solicitação
timeout3Tempo limite da solicitação em segundos
ssl_verifyfalseSe o certificado SSL do provedor de identidade deve ser verificado
introspection_endpointN/AO URL do endpoint de autenticação de token do provedor de identidade, que será extraído da resposta de descoberta se deixado em branco.
introspection_endpoint_auth_methodclient_secret_basicNome do método de autenticação para introspecção de token
public_keyN/AChave pública para autenticação de token
token_signing_alg_values_expectedN/AAlgoritmo para tokens de autenticação
set_access_token_headertrueSe deve carregar o token de acesso no cabeçalho da solicitação
access_token_in_authorization_headerfalseO token de acesso é colocado no cabeçalho Authorization quando verdadeiro, e no cabeçalho X-Access-Token quando falso.
set_id_token_headerfalseNão carregar o token de ID no cabeçalho X-ID-Token da solicitação
set_userinfo_headerfalseSe deve carregar informações do usuário no cabeçalho X-Userinfo da solicitação

O exemplo de código a seguir cria uma rota através da API Admin do Apache APISIX, definindo o upstream da rota para httpbin.org. httpbin.org é um serviço back-end simples para receber e responder a solicitações, a página get do httpbin.org será usada abaixo, consulte http bin get.

Para itens de configuração específicos, consulte Plug-in OpenID Connect do Apache APISIX.

curl  -XPOST 127.0.0.1:9080/apisix/admin/routes -H "X-Api-Key: edd1c9f034335f136f87ad84b625c8f1" -d '{
    "uri":"/*",
    "plugins":{
        "openid-connect":{
            "client_id":"{YOUR_CLIENT_ID}",
            "client_secret":"{YOUR_CLIENT_SECRET}",
            "discovery":"https://{YOUR_DISCOVERY}",
            "scope":"openid profile",
            "bearer_only":false,
            "realm":"apisix",
            "introspection_endpoint_auth_method":"client_secret_post",
            "redirect_uri":"http://127.0.0.1:9080/"
        }
    },
    "upstream":{
        "type":"roundrobin",
        "nodes":{
            "httpbin.org:80":1
        }
    }
}'

Passo 4: Acessar o Apache APISIX

  1. Acesse "http://127.0.0.1:9080/get" e a página será redirecionada para a página de login da Authing, pois o plug-in OpenID Connect já está ativado (esta página pode ser personalizada no console da Authing em "Aplicações - Branding"). Acessar Apache APISIX

  2. Insira a senha da conta do usuário registrada na Authing, ou o usuário user1/user1 criado no Passo 1, e clique em Login para acessar a conta Authing.

  3. Após o login bem-sucedido, você poderá acessar com sucesso a página get no httpbin.org. A página httpbin.org/get retornará os dados solicitados da seguinte forma.

    ...
    "X-Access-Token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InFqeU55aVdVd2NhbUFxdEdVRUNCeFNsTWxQSWtTR2N1NmkyZzhEUk1OSGsifQ.eyJqdGkiOiJjTy16a0pCS0NSRFlHR2kyWkJhY0oiLCJzdWIiOiI2MWM5OGFmOTg0MjI4YWU0OTYyMDU4NTIiLCJpYXQiOjE2NDA1OTg4NTgsImV4cCI6MTY0MTgwODQ1OCwic2NvcGUiOiJvcGVuaWQgcHJvZmlsZSIsImlzcyI6Imh0dHBzOi8vYXBpc2l4LmF1dGhpbmcuY24vb2lkYyIsImF1ZCI6IjYxYzk4M2M0YjI4NzdkNDg2OWRkOGFjYiJ9.l2V8vDWcCObB1LjIhKs2ARG4J7WuB-0c-bnYZG2GP2zcpl6PMAPcId2B76CaXCU58ajGcfRmOlWJ67UaHrfWKv8IM4vcYN1gwhKdokSyrhEM31gQE-MzNEsEbPaVIGXdpR1N2JnAJK5-tKIjopDAXSwArfO6fQKTpjLhCi3COIA169WGRR4CKCwNzzpFAYP2ilNc18D_HRTBLS6UjxZSNUtWE5dbx7uBjblhwIwn5e1fxiEQcknVK8Dxf8NUliFECvr02HX2hNvmuCECkvA_mZYlshAeqidK8tSEXirAWsWS5jlXFqLiBJkhSHFrbxRyqeOSfJCJR_YcCwk9AzgZGg",
    "X-Id-Token": "eyJhdF9oYXNoIjoiRl8tRjZaUVgtWVRDNEh0TldmcHJmUSIsImJpcnRoZGF0ZSI6bnVsbCwiZmFtaWx5X25hbWUiOm51bGwsImdlbmRlciI6IlUiLCJnaXZlbl9uYW1lIjpudWxsLCJpc3MiOiJodHRwczpcL1wvYXBpc2l4LmF1dGhpbmcuY25cL29pZGMiLCJwaWN0dXJlIjoiaHR0cHM6XC9cL2ZpbGVzLmF1dGhpbmcuY29cL2F1dGhpbmctY29uc29sZVwvZGVmYXVsdC11c2VyLWF2YXRhci5wbmciLCJwcmVmZXJyZWRfdXNlcm5hbWUiOm51bGwsInVwZGF0ZWRfYXQiOiIyMDIxLTEyLTI3VDA5OjU0OjE3Ljc3M1oiLCJ3ZWJzaXRlIjpudWxsLCJ6b25laW5mbyI6bnVsbCwibmFtZSI6bnVsbCwiaWF0IjoxNjQwNTk4ODU4LCJuaWNrbmFtZSI6bnVsbCwibm9uY2UiOiJmMTlmZjhjODM5NzdmZjNlMDczMzZmMzg3Y2QxM2EzMSIsIm1pZGRsZV9uYW1lIjpudWxsLCJleHAiOjE2NDE4MDg0NTgsInN1YiI6IjYxYzk4YWY5ODQyMjhhZTQ5NjIwNTg1MiIsImxvY2FsZSI6bnVsbCwiYXVkIjoiNjFjOTgzYzRiMjg3N2Q0ODY5ZGQ4YWNiIiwicHJvZmlsZSI6bnVsbH0=",
    "X-Userinfo": "eyJ3ZWJzaXRlIjpudWxsLCJ6b25laW5mbyI6bnVsbCwibmFtZSI6bnVsbCwicHJvZmlsZSI6bnVsbCwibmlja25hbWUiOm51bGwsInN1YiI6IjYxYzk4YWY5ODQyMjhhZTQ5NjIwNTg1MiIsImxvY2FsZSI6bnVsbCwiYmlydGhkYXRlIjpudWxsLCJmYW1pbHlfbmFtZSI6bnVsbCwiZ2VuZGVyIjoiVSIsImdpdmVuX25hbWUiOm51bGwsIm1pZGRsZV9uYW1lIjpudWxsLCJwaWN0dXJlIjoiaHR0cHM6XC9cL2ZpbGVzLmF1dGhpbmcuY29cL2F1dGhpbmctY29uc29sZVwvZGVmYXVsdC11c2VyLWF2YXRhci5wbmciLCJwcmVmZXJyZWRfdXNlcm5hbWUiOm51bGwsInVwZGF0ZWRfYXQiOiIyMDIxLTEyLTI3VDA5OjU0OjE3Ljc3M1oifQ=="
    ...
    

    X-Access-Token: O Apache APISIX coloca o token de acesso obtido do provedor de identidade no cabeçalho da solicitação X-Access-Token, opcionalmente no cabeçalho Authorization através de access_token_in_authorization_header na configuração do plug-in.

    X-Access-Token

    X-Id-Token: O Apache APISIX coloca o token de ID obtido do provedor de identidade no cabeçalho X-Id-Token após codificação base64, que pode ser ativado ou desativado por set_id_token_header na configuração do plug-in.

    X-Id-Token

    X-Userinfo: O Apache APISIX coloca as informações do usuário obtidas do provedor de identidade no X-Userinfo após codificá-las em base64. Você pode escolher se deseja ativar esse recurso usando set_userinfo_header na configuração do plug-in.

    X-Userinfo

    Como você pode ver, o Apache APISIX carregará os cabeçalhos de solicitação X-Access-Token, X-Id-Token e X-Userinfo para o upstream. O upstream pode analisar esses cabeçalhos para obter as informações de ID do usuário e os metadados do usuário.

  4. No "Log de Auditoria - Log de Comportamento do Usuário" no console da Authing, você pode observar as informações de login do user1. Informações de Login

Resumo

Este artigo descreve os passos detalhados para integrar o Apache APISIX com a Authing.

O Apache APISIX não apenas se compromete a manter seu próprio alto desempenho, mas também sempre deu grande importância à construção de um ecossistema de código aberto. Atualmente, o Apache APISIX possui mais de 10 plug-ins relacionados a autenticação e autorização que suportam integração com os principais serviços de autenticação e autorização do setor.

Se você tiver a necessidade de integrar com outros provedores de autenticação, visite o GitHub do Apache APISIX e deixe suas sugestões via issue; ou assine a lista de e-mails do Apache APISIX para expressar seus pensamentos por e-mail.

Tags: