Workflow n8n

Automatisation Slack avec n8n : vérification de signature sécurisée

Le workflow n8n 'Slack Webhook - Verify Signature' est conçu pour assurer la sécurité des intégrations avec Slack en vérifiant les signatures des requêtes entrantes. Dans un contexte où les entreprises utilisent Slack pour la communication interne, il est crucial de garantir que les messages proviennent de sources authentiques. Ce workflow est particulièrement utile pour les équipes techniques qui souhaitent automatiser des processus tout en maintenant un haut niveau de sécurité.

  • Étape 1 : le workflow commence par le déclencheur qui reçoit une requête via un webhook.
  • Étape 2 : il utilise le nœud 'Make Slack Verif Token' pour générer un jeton de vérification.
  • Étape 3 : ensuite, le nœud 'Encode Secret String' encode la chaîne secrète pour la vérification.
  • Étape 4 : une condition est vérifiée à l'aide du nœud 'IF' pour déterminer si la signature est valide. Si la vérification échoue, le workflow s'arrête avec un message d'erreur grâce au nœud 'Stop and Error'. Si la vérification est réussie, le workflow continue avec le nœud 'Set Verified to True', indiquant que la signature est authentifiée. Ce processus renforce la sécurité des interactions avec Slack et réduit les risques d'attaques potentielles. En intégrant ce workflow, les entreprises peuvent automatiser la vérification des signatures, ce qui leur permet de se concentrer sur d'autres aspects de leur activité tout en assurant la sécurité de leurs communications.
Tags clés :automatisationSlacksécuritéwebhookn8n
Catégorie: Webhook · Tags: automatisation, Slack, sécurité, webhook, n8n0

Workflow n8n Slack, sécurité, webhook : vue d'ensemble

Schéma des nœuds et connexions de ce workflow n8n, généré à partir du JSON n8n.

Workflow n8n Slack, sécurité, webhook : détail des nœuds

  • Make Slack Verif Token

    Ce noeud exécute un code JavaScript pour générer un token de vérification pour Slack.

  • Encode Secret String

    Ce noeud encode une chaîne secrète en utilisant un algorithme cryptographique.

  • IF

    Ce noeud évalue des conditions pour déterminer le chemin à suivre dans le workflow.

  • Stop and Error

    Ce noeud arrête le workflow et génère une erreur avec un message spécifié.

  • Execute Workflow Trigger

    Ce noeud déclenche l'exécution d'un autre workflow.

  • Sticky Note

    Ce noeud crée une note autocollante avec des paramètres de couleur, de taille et de contenu.

  • Set Verified to True

    Ce noeud met à jour un champ pour indiquer que la vérification est réussie.

  • Merge

    Ce noeud fusionne plusieurs ensembles de données selon des critères spécifiés.

  • Sticky Note1

    Ce noeud crée une note autocollante supplémentaire avec des paramètres de couleur, de taille et de contenu.

  • Sticky Note2

    Ce noeud crée une note autocollante avec des dimensions et un contenu spécifiés.

  • Sticky Note3

    Ce noeud crée une note autocollante avec des dimensions spécifiées.

  • Sticky Note4

    Ce noeud crée une note autocollante avec un contenu et des dimensions spécifiées.

Inscris-toi pour voir l'intégralité du workflow

Inscription gratuite

S'inscrire gratuitementBesoin d'aide ?
{
  "id": "84dT8cFL0FV8ZGPx",
  "meta": {
    "instanceId": "85d2d2ffc8886227640b031e8f18fdfe6c91f530d34ec1a8b1f13727419ae956"
  },
  "name": "Slack Webhook - Verify Signature",
  "tags": [],
  "nodes": [
    {
      "id": "b12fe8e7-45c4-4021-826e-3ae430e34001",
      "name": "Make Slack Verif Token",
      "type": "n8n-nodes-base.code",
      "position": [
        900,
        400
      ],
      "parameters": {
        "jsCode": "function encodeFormData(data) {\n  const encodedData = Object.keys(data)\n    .map(key => encodeURIComponent(key) + '=' + encodeURIComponent(data[key]))\n    .join('&')\n    .replaceAll(\"%20\", \"+\") // Slack does not encode \"+\" signs\n    .replaceAll(\"*\", \"%2A\") // Slack encodes \"*\" signs\n    .replaceAll(\"~\", \"%7E\"); // Slack encodes \"~\" signs\n    \n  return encodedData;\n}\n\nfunction buildSigBaseString(requestJson) {\n  const version = \"v0\"; // Slack Webhook version (Always v0 for the moment)\n  \n  const timestamp = requestJson.headers[\"x-slack-request-timestamp\"];\n  \n  const body = requestJson.body;\n  const encodedBody = encodeFormData(body);\n  \n  const sigBaseString = `${version}:${timestamp}:${encodedBody}`;\n\n  return sigBaseString;\n}\n\nconst requestJson = $input.first().json;\n\nconst sigBaseString = buildSigBaseString(requestJson);\n\nconst requestSignature = requestJson.headers[\"x-slack-signature\"];\n\nconsole.log({\n    sigBaseString,\n    requestSignature\n  });\nreturn {\n  json: {\n    sigBaseString,\n    requestSignature\n  },\n  pairedItem: 0\n}\n\n\n"
      },
      "typeVersion": 2
    },
    {
      "id": "a91e2d8f-e907-439c-9fd3-cb75e957b059",
      "name": "Encode Secret String",
      "type": "n8n-nodes-base.crypto",
      "position": [
        1120,
        400
      ],
      "parameters": {
        "type": "SHA256",
        "value": "={{ $json.sigBaseString }}",
        "action": "hmac",
        "dataPropertyName": "candidateSignature"
      },
      "typeVersion": 1
    },
    {
      "id": "d79ccfe1-61cd-4da4-bfff-1e504627bb3d",
      "name": "IF",
      "type": "n8n-nodes-base.if",
      "position": [
        1360,
        400
      ],
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{ $json.requestSignature }}",
              "value2": "=v0={{ $json.candidateSignature }}"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "cb2b9908-c226-438b-adb2-7c1ec852e007",
      "name": "Stop and Error",
      "type": "n8n-nodes-base.stopAndError",
      "position": [
        1580,
        580
      ],
      "parameters": {
        "errorMessage": "Could not verify Slack Webhook signature"
      },
      "typeVersion": 1
    },
    {
      "id": "5ef4c06a-717b-4f90-83a7-06eda780a892",
      "name": "Execute Workflow Trigger",
      "type": "n8n-nodes-base.executeWorkflowTrigger",
      "position": [
        680,
        400
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "86b022fb-63fd-4ccf-952e-19ed0da54a5c",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        880,
        -420
      ],
      "parameters": {
        "color": 4,
        "width": 554.4117841902089,
        "height": 278.2403290971726,
        "content": "## Slack Webhook - Verify Signature \nWhen receiving a message from a Slack Webhook, it is much more secure to verify that the message comes from Slack and not from bots or unknown services.\n\nThis small template is designed to validate the received signature (See [this URL](https://api.slack.com/authentication/verifying-requests-from-slack)).\n\n### Colors\n- **Blue** areas are **areas to edit**\n- **Yellow** areas are **explanations**"
      },
      "typeVersion": 1
    },
    {
      "id": "f5af4f44-1ea5-419b-a58b-f8f6839b6b05",
      "name": "Set Verified to True",
      "type": "n8n-nodes-base.set",
      "position": [
        1580,
        220
      ],
      "parameters": {
        "fields": {
          "values": [
            {
              "name": "signature_verified",
              "type": "booleanValue"
            }
          ]
        },
        "include": "none",
        "options": {}
      },
      "typeVersion": 3.2
    },
    {
      "id": "8a76dec8-7a2d-4cc9-82c9-002141e205ec",
      "name": "Merge",
      "type": "n8n-nodes-base.merge",
      "position": [
        1920,
        40
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "combinationMode": "mergeByPosition"
      },
      "typeVersion": 2.1
    },
    {
      "id": "0c8506bc-b114-4d25-8586-80549ae0026d",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1000,
        40
      ],
      "parameters": {
        "color": 6,
        "width": 359.58396920054975,
        "height": 548.3119898759418,
        "content": "## TO EDIT \nSet your Slack Signing Secret.\nYou can obtain it by visiting your Slack App dashboard in the general tab: https://api.slack.com/apps/[SLACK_APP_ID]/general\n"
      },
      "typeVersion": 1
    },
    {
      "id": "20cca69c-9d00-4471-8845-2cb91458c23e",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1560,
        399
      ],
      "parameters": {
        "width": 300.4638046519632,
        "height": 360.20237540316725,
        "content": "## Error Output\nIf the signature cannot be verified, an error will be raised. You can manage this scenario in your main workflow by either using an Error Workflow or by modifying your node settings and selecting appropriate actions in the event of an error.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "55ede23b-acb4-43ea-ac32-c678dd48e056",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1880,
        -220
      ],
      "parameters": {
        "width": 300.4638046519632,
        "height": 427.3843805720155,
        "content": "## Success Output\nIf the signature is successfully verified, we return a key `verified_signature` set to `true` along with the data from the Slack request itself.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "22d44888-5af4-43b9-b514-ebfc9c61b07c",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        560,
        160
      ],
      "parameters": {
        "width": 300.4638046519632,
        "height": 427.3843805720155,
        "content": "## Input\nThe input should be the received Slack request. Place this workflow directly after the Slack Webhook.\n"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "f9e78d89-0da8-465e-aa47-5396d9ac4d48",
  "connections": {
    "IF": {
      "main": [
        [
          {
            "node": "Set Verified to True",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Stop and Error",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Encode Secret String": {
      "main": [
        [
          {
            "node": "IF",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Verified to True": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Make Slack Verif Token": {
      "main": [
        [
          {
            "node": "Encode Secret String",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Execute Workflow Trigger": {
      "main": [
        [
          {
            "node": "Make Slack Verif Token",
            "type": "main",
            "index": 0
          },
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Workflow n8n Slack, sécurité, webhook : pour qui est ce workflow ?

Ce workflow s'adresse aux équipes techniques et développeurs travaillant dans des entreprises qui utilisent Slack pour la communication. Il est idéal pour les organisations de taille moyenne à grande qui cherchent à automatiser leurs processus tout en garantissant la sécurité des données échangées.

Workflow n8n Slack, sécurité, webhook : problème résolu

Ce workflow résout le problème de la vérification des signatures des requêtes Slack, une étape essentielle pour éviter les abus et garantir l'authenticité des messages. Sans ce processus, les entreprises risquent d'accepter des requêtes frauduleuses, ce qui pourrait compromettre la sécurité de leurs données. En intégrant cette automatisation, les utilisateurs obtiennent une solution fiable qui leur permet de sécuriser leurs intégrations avec Slack, réduisant ainsi les risques de sécurité.

Workflow n8n Slack, sécurité, webhook : étapes du workflow

Étape 1 : le workflow est déclenché par une requête webhook.

  • Étape 1 : le nœud 'Make Slack Verif Token' génère un jeton de vérification.
  • Étape 2 : le nœud 'Encode Secret String' encode la chaîne secrète pour la vérification.
  • Étape 3 : le nœud 'IF' vérifie si la signature est valide.
  • Étape 4 : si la vérification échoue, le nœud 'Stop and Error' arrête le workflow avec un message d'erreur.
  • Étape 5 : si la vérification réussit, le nœud 'Set Verified to True' indique que la signature est authentifiée.

Workflow n8n Slack, sécurité, webhook : guide de personnalisation

Pour personnaliser ce workflow, vous pouvez modifier le nœud 'Make Slack Verif Token' pour adapter le jeton de vérification à votre application Slack. Assurez-vous également de mettre à jour la chaîne secrète dans le nœud 'Encode Secret String' pour correspondre à celle de votre configuration Slack. Si vous souhaitez ajouter d'autres actions après la vérification, vous pouvez intégrer des nœuds supplémentaires après le nœud 'Set Verified to True'. Pensez à sécuriser votre webhook en limitant les adresses IP autorisées à envoyer des requêtes et en surveillant régulièrement les logs pour détecter toute activité suspecte.