Forward-Auth, Outra Opção para Função de Autenticação

API7.ai

January 26, 2022

Ecosystem

O Forward Auth move inteligentemente a lógica de autenticação e autorização para um serviço externo dedicado, onde o gateway encaminha a solicitação do usuário para o serviço de autenticação e bloqueia a solicitação original, substituindo o resultado quando o serviço de autenticação responde com um status diferente de 20x. Dessa forma, é possível retornar um erro personalizado ou redirecionar o usuário para a página de autenticação caso a autenticação falhe.

Princípio

Princípio do plugin

O princípio e o fluxo do forward-auth plugin no Apache APISIX são mostrados na figura acima e resumidos nos seguintes passos.

  • Passo 1: Uma solicitação é feita pelo cliente para o APISIX
  • Passo 2: O APISIX faz uma solicitação para o serviço de autenticação configurado pelo usuário
  • Passo 3: O serviço de autenticação responde (status 2xx ou exceção)
  • Passo 4: Com base na resposta do serviço de autenticação, o APISIX decidirá encaminhar a solicitação para o upstream ou enviar uma resposta de rejeição diretamente para o cliente

Como usar

Passo 1: Configurar o serviço de autenticação

Suponha que haja um serviço de autenticação para o qual o usuário envia uma solicitação com um cabeçalho de solicitação Authorization. Se esses dados passarem na autenticação, um código de status 200 e um cabeçalho de resposta chamado X-User-ID são retornados; se não passarem na autenticação, o status de autenticação é considerado expirado e um código de status 302 e o cabeçalho de resposta Location são retornados para redirecionar o cliente para a página de login.

Passo 2: Criar uma rota e habilitar o plugin forward-auth

Em seguida, configuraremos uma rota e habilitaremos o plugin forward-auth para conectar o serviço de autenticação acima com a aplicação upstream.

curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
    "plugins": {
        "forward-auth": {
            "address": "http://127.0.0.1:9080/auth",
            "request_headers": ["Authorization"],
            "upstream_headers": ["X-User-ID"],
            "client_headers": ["Location"]
        }
    },
    "uri": "/user"
}'

Os detalhes da configuração acima são explicados.

  • Quando uma solicitação corresponde à rota atual, uma solicitação é enviada para o address no endereço com o cabeçalho de solicitação Authorization definido em request_headers (ou seja, o cabeçalho de solicitação configurado para ser encaminhado pelo cliente para o serviço de autenticação, se não for definido, nenhum cabeçalho de solicitação é encaminhado), permitindo que o serviço de autenticação confirme a identidade do usuário.
  • Se a autenticação passar, o código de status será 200 e retornará um X-User-ID conforme definido em upstream_headers (ou seja, o cabeçalho de solicitação a ser encaminhado para o upstream pelo serviço de autenticação quando a autenticação passar, se não for definido, nenhum cabeçalho de solicitação é encaminhado).
  • Se a autenticação falhar, o código de status será 302 e retornará um Location conforme definido em client_headers (ou seja, o cabeçalho de resposta enviado pelo serviço de autenticação para o cliente se a autenticação falhar, ou nenhum cabeçalho de resposta se não for definido).

Passo 3: Testar as solicitações

# Solicitação e envio de dados usando POST
curl http://127.0.0.1:9080/user \
    --header 'Authorization: true'

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 28
Server: APISIX/2.11.0

{"user_id":"i-am-real-user"}

# Solicitação usando GET
curl -i http://127.0.0.1:9080/user \
    --header 'Authorization: false'

HTTP/1.1 302 FOUND
Server: APISIX/2.11.0
Location: https://example.com/auth

Adendo: Desabilitar o plugin

Se você terminou de usar o plugin Forward Auth, basta remover a configuração do plugin forward-auth da configuração da rota e salvar para desativar o plugin Forward Auth na rota.

Graças à natureza dinâmica do Apache APISIX, não é necessário reiniciar o Apache APISIX para ativar e desativar o plugin.

Resumo

Para obter mais informações sobre a descrição do plugin forward-auth e a lista completa de configurações, você pode consultar a documentação oficial. Além disso, se você tiver cenários de aplicação de autenticação ou autorização mais complexos, tente usar o plugin opa, que permite funcionalidades mais poderosas de forma programável.

O Apache APISIX também está atualmente trabalhando em plugins adicionais para suportar a integração de serviços adicionais, então, se você estiver interessado, sinta-se à vontade para iniciar uma discussão no GitHub Discussion, ou via lista de e-mails para se comunicar.

Tags: