Authenticated Data Access

🇬🇧 English | 🇩🇪 Deutsch


🇬🇧 English

Authenticated Data Access via Chat

This use case shows how customers can securely access their personal data through a chat interface after authentication – an alternative to phone calls where authorities and i>

Target Groups

  • Organizations with customer portals
  • Service providers with personal user data
  • Anyone needing secure data access alternative to phone

The Problem

Many organizations (authorities, insurance, etc.) do not release data or accept changes over the phone for security reasons. The chat should be the digital alternative.

Solution: Chat-Based Authentication

  1. User requests data
  2. Agent asks for email
  3. Agent generates verification code and sends via email
  4. User enters code in chat
  5. Agent verifies code
  6. After successful auth: access to personal data

How It Works

User: "I want to see my data"
→ Agent: "Which email address?"
→ User: "max@example.com"
→ Agent calls n8n webhook → Code generated + email sent
→ Agent: "Please enter the code"
→ User: "123456"
→ Agent calls n8n webhook → Code verified
→ ✅ Authenticated → Agent retrieves data from database

Prerequisites

  1. n8n running on the server
  2. Email service (AgentMail or any SMTP)
  3. Database with customer data (MySQL/MariaDB, etc.)
  4. OpenClaw agent configured

Technical Implementation

Step 1: n8n Workflow (Draft)

The n8n workflow handles:

  • Code generation (6-digit random)
  • Email sending (verification code)
  • Code storage (temporary, with expiry)
  • Code verification
  • Data retrieval after successful auth

Workflow 1: Generate and send code

[Webhook: /webhook/send-code]
    ↓
[Generate code] → 6-digit random number
    ↓
[Store in database] → Code, email, timestamp, expiry (10 min)
    ↓
[Send email] → Code to specified email
    ↓
[Return] → "Code sent"

Workflow 2: Verify code + retrieve data

[Webhook: /webhook/verify-code]
    ↓
[Check code + email] → Exists? Not expired?
    ↓ (yes)
[Fetch data from DB] → SELECT * FROM customer_data WHERE email = ?
    ↓
[Return] → Data
    ↓ (no)
[Return] → "Code invalid or expired"

Database tables:

-- Store codes
CREATE TABLE verification_codes (
  id INT PRIMARY KEY AUTO_INCREMENT,
  email VARCHAR(255),
  code VARCHAR(6),
  created_at DATETIME,
  expires_at DATETIME,
  used BOOLEAN DEFAULT FALSE
);

-- Customer data
CREATE TABLE customer_data (
  id INT PRIMARY KEY,
  email VARCHAR(255),
  name VARCHAR(255),
  data TEXT
);

Webhook endpoints:

  • POST /webhook/send-code – Generates and sends code
  • POST /webhook/verify-code – Verifies code, returns data

Step 2: Database

Simple table structure:

CREATE TABLE customer_data (
  id INT PRIMARY KEY,
  email VARCHAR(255),
  name VARCHAR(255),
  data TEXT
);

Step 3: Agent Configuration

In AGENTS.md, add rules:

## Authentifizierter Datenzugriff

- Kunde fragt nach persönlichen Daten
- Zuerst nach E-Mail fragen
- Code generieren via n8n Webhook
- User muss Code eingeben
- Erst nach Verifikation Daten zeigen
- Code läuft nach 10 Minuten ab

Example Flow

User: "Ich möchte meine Daten abrufen"

Agent: "Gerne. Bitte nennen Sie mir Ihre E-Mail-Adresse."

User: "max@example.com"

Agent: (calls n8n) "Ein Bestätigungscode wurde an Ihre E-Mail gesendet."

Agent: "Bitte geben Sie den Code ein."

User: "123456"

Agent: (calls n8n) "✅ Authentifizierung erfolgreich!"

Agent: "Hier sind Ihre Daten: ..."

Security Notes

  • Code should expire after 10 minutes
  • Max 3 attempts before lockout
  • Log all authentication attempts
  • Never show data without verification

🇩🇪 Deutsch

Authentifizierter Datenzugriff per Chat

Dieser Use Case zeigt, wie Kunden sicher über eine Chat-Oberfläche auf ihre persönlichen Daten zugreifen können – als Alternative zum Telefon, wo Behörden und Versicherungen selten>

Zielgruppen

  • Organisationen mit Kundenportalen
  • Dienstleister mit persönlichen Kundendaten
  • Jeder, der einen sicheren Datenzugriff als Alternative zum Telefon braucht

Das Problem

Viele Organisationen (Behörden, Versicherungen, etc.) geben aus Sicherheitsgründen keine Daten telefonisch heraus und nehmen keine Änderungen telefonisch an. Der Chat soll die digi>

Lösung: Chat-basierte Authentifizierung

  1. Nutzer fragt nach Daten
  2. Agent fragt nach E-Mail
  3. Agent generiert Bestätigungscode und sendet per E-Mail
  4. Nutzer gibt Code im Chat ein
  5. Agent verifiziert Code
  6. Nach erfolgreicher Auth: Zugriff auf persönliche Daten

So funktioniert es

Nutzer: "Ich will meine Daten"
→ Agent: "Welche E-Mail?"
→ Nutzer: "max@example.com"
→ Agent ruft n8n auf → Code generiert + E-Mail gesendet
→ Agent: "Bitte Code eingeben"
→ Nutzer: "123456"
→ Agent ruft n8n auf → Code verifiziert
→ ✅ Authentifiziert → Agent ruft Daten aus DB ab

Voraussetzungen

  1. n8n auf dem Server installiert
  2. E-Mail-Dienst (AgentMail oder SMTP)
  3. Datenbank mit Kundendaten (MySQL/MariaDB, etc.)
  4. OpenClaw-Agent konfiguriert

Technische Umsetzung

Schritt 1: n8n Workflow (Entwurf)

Der n8n Workflow erledigt:

  • Code-Generierung (6-stelliger Zufallscode)
  • E-Mail-Versand (Bestätigungscode)
  • Code-Speicherung (temporär, mit Ablauf)
  • Code-Verifizierung
  • Datenabruf nach erfolgreicher Auth

Workflow 1: Code generieren + senden

[Webhook: /webhook/send-code]
    ↓
[Code generieren] → 6-stellige Zufallszahl
    ↓
[In Datenbank speichern] → Code, E-Mail, Zeitstempel, Ablauf (10 Min)
    ↓
[E-Mail senden] → Code an angegebene E-Mail
    ↓
[Return] → "Code gesendet"

Workflow 2: Code verifizieren + Daten abrufen

[Webhook: /webhook/verify-code]
    ↓
[Code + E-Mail prüfen] → Existiert? Nicht abgelaufen?
    ↓ (ja)
[Daten aus DB holen] → SELECT * FROM customer_data WHERE email = ?
    ↓
[Return] → Daten
    ↓ (nein)
[Return] → "Code ungültig oder abgelaufen"

Datenbank-Tabellen:

-- Codes speichern
CREATE TABLE verification_codes (
  id INT PRIMARY KEY AUTO_INCREMENT,
  email VARCHAR(255),
  code VARCHAR(6),
  created_at DATETIME,
  expires_at DATETIME,
  used BOOLEAN DEFAULT FALSE
);

-- Kundendaten
CREATE TABLE customer_data (
  id INT PRIMARY KEY,
  email VARCHAR(255),
  name VARCHAR(255),
  data TEXT
);

Webhook-Endpunkte:

  • POST /webhook/send-code – Code generieren + senden
  • POST /webhook/verify-code – Code verifizieren, Daten zurückgeben

Schritt 2: Datenbank

Einfache Tabellenstruktur:

CREATE TABLE customer_data (
  id INT PRIMARY KEY,
  email VARCHAR(255),
  name VARCHAR(255),
  data TEXT
);

Schritt 3: Agent-Konfiguration

In AGENTS.md Regeln hinzufügen:

## Authentifizierter Datenzugriff

- Kunde fragt nach persönlichen Daten
- Zuerst nach E-Mail fragen
- Code generieren via n8n Webhook
- User muss Code eingeben
- Erst nach Verifikation Daten zeigen
- Code läuft nach 10 Minuten ab

Beispiel-Ablauf

Nutzer: "Ich möchte meine Daten abrufen"