Pular para o conteúdo principal

Autenticação e Acesso

Autenticação e Acesso

Este documento detalha como configurar autenticação segura no n8n, abordando métodos de login, integração com LDAP/Active Directory, SSO empresarial, autenticação de dois fatores, controle de sessão, e políticas de segurança que protegem o acesso à plataforma garantindo que apenas usuários autorizados possam criar, modificar ou executar workflows sensíveis em ambiente corporativo.

Configuração Básica

Configuração de Portas

# Configuração básica de portas
N8N_PORT=5678
N8N_PROTOCOL=https
N8N_HOST=0.0.0.0
N8N_PORT=5678

Política de Senhas

# Configurar política de senhas forte
N8N_PASSWORD_POLICY_MIN_LENGTH=12
N8N_PASSWORD_POLICY_REQUIRE_UPPERCASE=true
N8N_PASSWORD_POLICY_REQUIRE_LOWERCASE=true
N8N_PASSWORD_POLICY_REQUIRE_NUMBERS=true
N8N_PASSWORD_POLICY_REQUIRE_SPECIAL_CHARS=true

Autenticação de Dois Fatores

Configuração 2FA

{
  "userId": "user123",
  "twoFactorEnabled": true,
  "twoFactorSecret": "JBSWY3DPEHPK3PXP",
  "backupCodes": [
    "12345678",
    "87654321",
    "11223344"
  ]
}

SSO Single Sign-On

SAML

# Configuração SAML
N8N_SAML_ENABLED=true
N8N_SAML_ISSUER=https://seu-identity-provider.com
N8N_SAML_ENTRY_POINT=https://seu-identity-provider.com/sso
N8N_SAML_CERT=/path/to/certificate.pem
N8N_SAML_PRIVATE_KEY=/path/to/private-key.pem
N8N_SAML_SIGNATURE_ALGORITHM=SHA256

OAuth

# Configuração OAuth
N8N_OAUTH_ENABLED=true
N8N_OAUTH_CLIENT_ID=seu_client_id
N8N_OAUTH_CLIENT_SECRET=SEU_CLIENT_SECRET_AQUI
N8N_OAUTH_AUTHORIZATION_URL=https://seu-provider.com/oauth/authorize
N8N_OAUTH_TOKEN_URL=https://seu-provider.com/oauth/token
N8N_OAUTH_USERINFO_URL=https://seu-provider.com/oauth/userinfo

Active Directory

# Configuração Active Directory
N8N_LDAP_ENABLED=true
N8N_LDAP_SERVER_URL=ldap://dc.empresa.com:389
N8N_LDAP_BIND_DN=cn=admin,dc=empresa,dc=com
N8N_LDAP_BIND_PASSWORD=SUA_SENHA_AD_AQUI
N8N_LDAP_BASE_DN=dc=empresa,dc=com
N8N_LDAP_USER_FILTER=(sAMAccountName={{username}})
N8N_LDAP_USER_ATTRIBUTE=sAMAccountName
N8N_LDAP_EMAIL_ATTRIBUTE=mail
N8N_LDAP_NAME_ATTRIBUTE=displayName
N8N_LDAP_GROUP_FILTER=(memberOf=cn=n8n-users,ou=groups,dc=empresa,dc=com)

Configurações de Segurança

Controle de Sessão

# Timeout de sessão
N8N_SESSION_TIMEOUT=3600000
N8N_SESSION_SECRET=SUA_SESSION_SECRET_AQUI
N8N_SESSION_COOKIE_SECURE=true
N8N_SESSION_COOKIE_HTTPONLY=true

Horários de Acesso

# Configurar horários de acesso
N8N_ACCESS_HOURS_START=09:00
N8N_ACCESS_HOURS_END=18:00
N8N_ACCESS_TIMEZONE=America/Sao_Paulo
N8N_ACCESS_DAYS=monday,tuesday,wednesday,thursday,friday

Script de Verificação

#!/bin/bash

# Verificar horário de acesso
CURRENT_DAY=$(date +%A | tr '[:upper:]' '[:lower:]')
ALLOWED_START="09:00"
ALLOWED_END="18:00"
ALLOWED_DAYS="monday,tuesday,wednesday,thursday,friday"

# Verificar dia da semana
if [[ ! " $ALLOWED_DAYS " =~ " $CURRENT_DAY " ]]; then
    echo "Acesso negado: Fora dos dias permitidos"
    exit 1
fi

# Verificar horário
CURRENT_TIME=$(date +%H:%M)
if [[ "$CURRENT_TIME" < "$ALLOWED_START" || "$CURRENT_TIME" > "$ALLOWED_END" ]]; then
    echo "Acesso negado: Fora do horário permitido"
    exit 1
fi

echo "Acesso permitido"
exit 0

Logs de Segurança

{
  "securityLogs": {
    "login_success": "Login bem-sucedido",
    "login_failed": "Tentativa de login falhou",
    "logout": "Logout realizado",
    "password_change": "Senha alterada",
    "password_reset": "Senha resetada",
    "two_factor_enabled": "2FA ativado",
    "two_factor_disabled": "2FA desativado",
    "account_locked": "Conta bloqueada",
    "account_unlocked": "Conta desbloqueada",
    "session_expired": "Sessão expirada",
    "suspicious_activity": "Atividade suspeita detectada"
  }
}

Alertas de Segurança

Configuração de Alertas

# Configurar alertas de segurança
N8N_SECURITY_ALERTS_ENABLED=true
N8N_SECURITY_WEBHOOK_URL=https://hooks.slack.com/services/YOUR/WEBHOOK/URL
N8N_SECURITY_EMAIL_ALERTS=true
N8N_SECURITY_EMAIL_FROM=security@empresa.com
N8N_SECURITY_EMAIL_TO=admin@empresa.com

Tipos de Alertas

// Configuração de alertas
const securityAlerts = {
  failedLogins: {
    threshold: 5,
    timeWindow: "15m",
    action: "notify_admin"
  },
  unusualActivity: {
    newLocation: true,
    unusualHours: true,
    action: "notify_user"
  },
  accountLockouts: {
    action: "notify_admin",
    immediate: true
  },
  twoFactorFailures: {
    threshold: 3,
    action: "notify_admin"
  }
};

Configuração Avançada

Proxy Reverso

Configuração Nginx com Autenticação

# Configuração Nginx com autenticação
server {
    listen 443 ssl http2;
    server_name n8n.empresa.com;

    # SSL Configuration
    ssl_certificate /path/to/certificate.crt;
    ssl_certificate_key /path/to/private.key;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;

    # Security Headers
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    add_header X-Frame-Options DENY always;
    add_header X-Content-Type-Options nosniff always;
    add_header X-XSS-Protection "1; mode=block" always;

    # Rate limiting
    limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;
    limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;

    # Login endpoint com rate limiting
    location /login {
        limit_req zone=login burst=3 nodelay;
        proxy_pass http://n8n_backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    # API endpoints
    location /api {
        limit_req zone=api burst=20 nodelay;
        proxy_pass http://n8n_backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    # General proxy
    location / {
        proxy_pass http://n8n_backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Headers de Segurança

Configuração Completa de Headers

# Headers de segurança completos
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
add_header X-Frame-Options DENY always;
add_header X-Content-Type-Options nosniff always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always;
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' data:; connect-src 'self' https:; frame-ancestors 'none';" always;

Próximos Passos

Recursos Relacionados