Como Usar a Autenticação do Apache APISIX com Okta
Fei Han
September 7, 2021
Usando o Plug-in OpenID Connect do Apache APISIX para Autenticação de Identidade Centralizada
Usar o plug-in OpenID Connect do Apache APISIX para configurar a autenticação Okta é um processo simples de três etapas. Ele permite que você mude do modo de autenticação tradicional para o modo de autenticação de identidade centralizada. As seções a seguir descrevem as etapas para configurar a autenticação Okta usando o plug-in OpenID Connect para o Apache APISIX.
O modo de autenticação de identidade centralizada, em comparação com o modo de autenticação tradicional, tem as seguintes vantagens:
- A autenticação de identidade centralizada simplifica o processo de desenvolvimento de aplicativos.
- A autenticação de identidade centralizada melhora a segurança dos negócios.
Pré-requisito
Tenha uma conta Okta pronta para uso.
Etapa 1: Configurando o Okta
- Faça login na sua conta Okta, clique em "Create App Integration" para criar um aplicativo Okta.
- Selecione "OIDC - OpenID Connect" como método de login e "Web Application" como tipo de aplicativo.
- Defina o URL de redirecionamento para login e logout. Os "Sign-in redirect URIs" são os links permitidos para redirecionamento após um login bem-sucedido, e os "Sign-out redirect URIs" são os links redirecionados após um logout bem-sucedido. Neste exemplo, definimos ambos os URIs de redirecionamento de login e logout como http://127.0.0.1:9080/.
- Após concluir as configurações, clique em "Save" para salvar as alterações.
- Visite a página Geral do aplicativo para obter as seguintes configurações, que são necessárias para configurar o OpenID Connect do Apache APISIX.
- Client ID: O ID do aplicativo, que corresponde ao
client_id
abaixo. - Client secret: A chave do aplicativo, que corresponde ao
client_secret
abaixo. - Okta domain: O domínio usado pelo aplicativo, correspondente ao
{ISSUER}
abaixo.
Etapa 2: Instalando o Apache APISIX
Instalando Dependências
O ambiente de execução do Apache APISIX requer dependências no 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 & 32, Ubuntu 16.04 & 18.04, Debian 9 & 10 e MacOS. Consulte Instalar Dependências para mais detalhes.
Instalando 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
Instalando via Docker
Consulte: Instalando o Apache APISIX com Docker.
Instalando via Helm Chart
Consulte: Instalando o Apache APISIX com Helm Chart.
Instalando via Release de Fonte
-
Crie um diretório chamado
apisix-2.7
.mkdir apisix-2.7
-
Baixe o pacote de fonte do Release do Apache APISIX.
wget https://downloads.apache.org/apisix/2.7/apache-apisix-2.7-src.tgz
Você também pode baixar o pacote de fonte do Release do Apache APISIX no site do Apache APISIX. O Site Oficial do Apache APISIX - Página de Download também fornece pacotes de fonte para o Apache APISIX, APISIX Dashboard e APISIX Ingress Controller.
-
Extraia o pacote de fonte do Release do Apache APISIX.
tar zxvf apache-apisix-2.7-src.tgz -C apisix-2.7
-
Instale as bibliotecas Lua dependentes do runtime.
# 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
Etapa 3: Iniciar o Apache APISIX e Configurar a Rota Correspondente
-
Execute o seguinte comando para iniciar o Apache APISIX.
apisix start
-
Crie uma rota e configure o plug-in OpenID Connect. O exemplo de código a seguir cria uma rota por meio da API Admin do Apache APISIX, definindo o caminho upstream para httpbin.org, um serviço backend simples para receber e responder a solicitações. O seguinte usará a página get do httpbin.org. Consulte http bin get para mais informações. Para itens de configuração específicos, consulte o Plug-in OpenID Connect do Apache APISIX.
Os campos de configuração do OpenID Connect estão listados abaixo:
Campo | Valor Padrão | Descrição |
---|---|---|
client_id | "" | ID do cliente OAuth. |
client_secret | "" | Segredo do cliente OAuth. |
discovery | "" | Endpoints de descoberta de serviço para provedores de identidade. |
scope | openid | Escopo dos recursos a serem acessados. |
relm | apisix | Especifica as informações de autenticação do cabeçalho de resposta WWW-Authenticate. |
bearer_only | false | Se deve verificar o token no cabeçalho da solicitação. |
logout_path | /logout | URI de logout. |
redirect_uri | request_uri | O URI para o qual o provedor de identidade redireciona de volta, padrão é o endereço da solicitação. |
timeout | 3 | Tempo de timeout da solicitação, definido em segundos. |
ssl_verify | false | Verifica o certificado SSL do provedor de identidade. |
introspection_endpoint | "" | O 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_method | client_secret_basic | Nome do método de autenticação para introspecção de token. |
public_key | "" | Chave pública para um token de autenticação. |
token_signing_alg_values_expected | "" | Algoritmo para tokens de autenticação. |
set_access_token_header | true | Se deve carregar o token de acesso no cabeçalho da solicitação. |
access_token_in_authorization_header | false | Se deve colocar um token de acesso no cabeçalho Authorization. O token de acesso é colocado no cabeçalho Authorization quando este valor é definido como true e no cabeçalho X-Access-Token quando definido como false. |
set_id_token_header | true | Se deve carregar o token ID no cabeçalho X-ID-Token da solicitação. |
set_userinfo_header | true | Se deve carregar informações do usuário no cabeçalho X-Userinfo da solicitação. |
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_ISSUER}/.well-known/openid-configuration",
"scope":"openid profile",
"bearer_only":false,
"realm":"master",
"introspection_endpoint_auth_method":"client_secret_post",
"redirect_uri":"http://127.0.0.1:9080/"
}
},
"upstream":{
"type":"roundrobin",
"nodes":{
"httpbin.org:80":1
}
}
}'
Verificação
-
Acesse "http://127.0.0.1:9080/get" e a página será redirecionada para a página de login do Okta porque o plug-in OpenID Connect está habilitado.
-
Insira o nome de usuário e senha da conta Okta do usuário e clique em "Sign In" para fazer login na sua conta Okta.
-
Após o login bem-sucedido, você pode acessar a página get em "httpbin.org". A página "httpbin.org/get" retornará os dados solicitados com X-Access-Token, X-Id-Token e X-Userinfo, conforme mostrado abaixo.
"X-Access-Token": "******Y0RPcXRtc0FtWWVuX2JQaFo1ZVBvSlBNdlFHejN1dXY5elV3IiwiYWxnIjoiUlMyNTYifQ.***TVER3QUlPbWZYSVRzWHRxRWh2QUtQMWRzVDVGZHZnZzAiLCJpc3MiOiJodHRwczovL3FxdGVzdG1hbi5va3RhLmNvbSIsImF1ZCI6Imh0dHBzOi8vcXF0ZXN0bWFuLm9rdGEuY29tIiwic3ViIjoiMjgzMDE4Nzk5QHFxLmNvbSIsImlhdCI6MTYyODEyNjIyNSwiZXhwIjoxNjI4MTI5ODI1LCJjaWQiOiIwb2ExMWc4ZDg3TzBGQ0dYZzY5NiIsInVpZCI6IjAwdWEwNWVjZEZmV0tMS3VvNjk1Iiwic2NwIjpbIm9wZW5pZCIsInByb2Zpb***.****iBshIcJhy8QNvzAFD0fV4gh7OAdTXFMu5k0hk0JeIU6Tfg_Mh-josfap38nxRN5hSWAvWSk8VNxokWTf1qlaRbypJrKI4ntadl1PrvG-HgUSFD0JpyqSQcv10TzVeSgBfOVD-czprG2Azhck-SvcjCNDV-qc3P9KoPQz0SRFX0wuAHWUbj1FRBq79YnoJfjkJKUHz3uu7qpTK89mxco8iyuIwB8fAxPMoXjIuU6-6Bw8kfZ4S2FFg3GeFtN-vE9bE5vFbP-JFQuwFLZNgqI0XO2S7l7Moa4mWm51r2fmV7p7rdpoNXYNerXOeZIYysQwe2_L****", "X-Id-Token": "******aTdDRDJnczF5RnlXMUtPZUtuSUpQdyIsImFtciI6WyJwd2QiXSwic3ViIjoiMDB1YTA1ZWNkRmZXS0xLdW82OTUiLCJpc3MiOiJodHRwczpcL1wvcXF0ZXN0bWFuLm9rdGEuY29tIiwiYXVkIjoiMG9hMTFnOGQ4N08wRkNHWGc2OTYiLCJuYW1lIjoiUGV0ZXIgWmh1IiwianRpIjoiSUQuNGdvZWo4OGUyX2RuWUI1VmFMeUt2djNTdVJTQWhGNS0tM2l3Z0p5TTcxTSIsInZlciI6MSwicHJlZmVycmVkX3VzZXJuYW1lIjoiMjgzMDE4Nzk5QHFxLmNvbSIsImV4cCI6MTYyODEyOTgyNSwiaWRwIjoiMDBvYTA1OTFndHAzMDhFbm02OTUiLCJub25jZSI6ImY3MjhkZDMxMWRjNGY3MTI4YzlmNjViOGYzYjJkMDgyIiwiaWF0IjoxNjI4MTI2MjI1LCJhdXRoX3RpbWUi*****", "X-Userinfo": "*****lfbmFtZSI6IlpodSIsImxvY2FsZSI6ImVuLVVTIiwicHJlZmVycmVkX3VzZXJuYW1lIjoiMjgzMDE4Nzk5QHFxLmNvbSIsInVwZGF0ZWRfYXQiOjE2MjgwNzA1ODEsInpvbmVpbmZvIjoiQW1lcmljYVwvTG9zX0FuZ2VsZXMiLCJzdWIiOiIwMHVhMDVlY2RGZldLTEt1bzY5NSIsImdpdmVuX25hbWUiOiJQZXRlciIsIm5hbWUiOiJQZXRl****"
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 via o access_token_in_authorization_header
na configuração do plug-in no cabeçalho Authorization.
X-Id-Token: O Apache APISIX obterá o token ID do provedor de identidade e o codificará em Base64 no cabeçalho da solicitação X-Id-Token. Você pode escolher se deseja habilitar essa função por meio do set_id_token_header
na configuração do plug-in, que está habilitado por padrão.
X-Userinfo: O Apache APISIX obterá as informações do usuário do provedor de identidade e as colocará no X-Userinfo após codificá-las em Base64. Você pode escolher se deseja habilitar essa função por meio do set_userinfo_header
na configuração do plug-in, que está habilitado por padrão.
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 informações de ID do usuário e metadados do usuário.
Mostramos o processo de construção de autenticação de identidade centralizada do Okta diretamente no Gateway Apache APISIX. É fácil se inscrever para uma conta gratuita de Desenvolvedor Okta para começar. Nossa abordagem reduz a sobrecarga do desenvolvedor e permite uma experiência segura e simplificada.
Sobre o Okta
O Okta é uma solução personalizável, segura e pronta para adicionar serviços de autenticação e autorização aos seus aplicativos. Obtenha autenticação escalável integrada diretamente ao seu aplicativo sem a sobrecarga de desenvolvimento, riscos de segurança e manutenção que vêm com a codificação manual. Você pode conectar qualquer aplicativo em qualquer linguagem ou em qualquer stack ao Okta e definir como deseja que seus usuários façam login. Cada vez que um usuário tenta se autenticar, o Okta verificará sua identidade e enviará as informações necessárias de volta ao seu aplicativo.
Sobre o Apache APISIX
O Apache APISIX é um gateway de API dinâmico, em tempo real e de alto desempenho. O Apache APISIX fornece recursos avançados de gerenciamento de tráfego, como balanceamento de carga, upstream dinâmico, lançamento canário, circuit breaker, autenticação, observabilidade e muito mais. Você pode usar o Apache APISIX para lidar com o tráfego tradicional norte-sul, bem como o tráfego leste-oeste entre serviços. Ele também pode ser usado como um controlador de ingress do k8s.
Centenas de empresas em todo o mundo usam o Apache APISIX, cobrindo finanças, internet, manufatura, varejo, operadoras, como NASA, Fábrica Digital da União Europeia, TravelSky, Tencent, Huawei, Weibo, China Mobile, Taikang, 360, etc.
Github: https://github.com/apache/apisix
Website: https://apisix.apache.org