Architektur

Sicherheit & Auth

Wie dataflows Secrets, Tokens und Berechtigungen handhabt.

Token-Management

Der Umgang mit OAuth2-Tokens ist komplex. dataflows abstrahiert das vollständig weg.

Die connections-Tabelle

Tokens werden in der connections-Tabelle gespeichert.

  • Verschlüsselung: access_token und refresh_token werden mit AES-256-GCM verschlüsselt, bevor sie in die Datenbank geschrieben werden.
  • Auto-Refresh: Die Engine prüft automatisch expires_at und erneuert den Token, bevor ein Workflow-Schritt läuft.

Service-Clients

Wir trennen die „Application“ (Service-Client) vom „User“ (Connection).

  • Service-Client: Enthält client_id und client_secret.
  • Connection: Enthält das access_token des Users.

Dependency Injection

Workflows greifen nie direkt auf Secrets zu. Die Engine injiziert vorauthentifizierte Clients in jeden Schritt.

// ❌ SCHLECHT: Tokens manuell handhaben
const token = await db.tokens.find(...)
await fetch('https://api.github.com', {
  headers: { Authorization: token }
})

// ✅ GUT: Authentifizierter Client von der Engine injiziert
export const syncIssues = defineWorkflow({
  id: 'sync-github-issues',
  trigger: schedule.every('1h'),

  async run({ step, clients }) {
    // Die Engine löst die Connection auf, erneuert Tokens
    // bei Bedarf und gibt dir einen einsatzbereiten Client.
    return step.run('fetch-issues', () =>
      clients.github.listIssues({ repo: 'dataflows-io/app' })
    )
  }
})

Isolation

Jede Workflow-Execution läuft in einem isolierten Kontext.

  • Environment-Variablen: Secrets werden als Umgebungsvariablen injiziert.
  • Netzwerk-Isolation: Workflows können auf bestimmte Egress-Domains beschränkt werden.

Lass uns über deinen Prozess sprechen

Erzähl uns, wo es aktuell klemmt. Wir sagen dir offen, ob und wie dataflows hilft – ohne Pitch, einfach ehrlich.