Integrieren · E7 · 6 Stufen

Umgebungsvariablen, Secrets und Workflow-Ergebnisse

Konfiguration und Geheimnisse sauber aus dem Funktionscode auslagern — und die Grenzen der UI-Maskierung kennen.

Was du in diesem Tutorial lernst

Du lagerst Werte aus dem Code aus (Umgebungsvariablen auf Org- und Funktions-Ebene), kennst die Priorität, setzt timeout richtig, verstehst, warum „Vertraulich" kein Secret-Safe ist, und verarbeitest Workflow-Ergebnisse über aiserviceresults sicher weiter.

Voraussetzung: E3 (Funktionen), E6 empfohlen. Abgrenzung: E6 braucht Umgebungsvariablen für M365/Google; E7 vertieft den Betrieb — Priorität, Export, Maskierung, Leak-Pfade, Workflow-Kontext.

Quellen und Stand

Geprüft gegen das AuxData-Programmierhandbuch (Stand Juni 2026): Umgebungsvariablen, Vertrauliche Werte, aiserviceresults, Organisation-Modul, Best Practices. Alle Tokens sind Platzhalter.

Stufe 1 von 6

Warum Umgebungsvariablen

Konfiguration, keine fachlichen Parameter.

1Wofür sie gedacht sind

Umgebungsvariablen sind für Werte, die man nicht hart codieren will und die keine fachlichen Funktionsparameter sind. (PH „Was sind Umgebungsvariablen?")

Typische Beispiele: API-Tokens, Client Secrets, Tenant-IDs, Datenbankzugangsdaten, Service-Account-JSON, Refresh-Tokens, produktionsabhängige URLs.

In der Funktion stehen sie als globale Bezeichner bereit:

var apiKey = api_token;     // Umgebungsvariable api_token
var dbHost = db_host;
Regel: Umgebungsvariablen sind Konfiguration. Fachliche Eingaben kommen als Funktionsparameter; Betriebswerte kommen aus der Umgebung.
✎ Frage: Ist kundenname ein Parameter oder eine Umgebungsvariable? Und client_secret?

✓ Das hast du jetzt verstanden

Stufe 2 von 6

Organisation vs. Funktion

Zwei Ebenen, eine Prioritätsregel.

1Die zwei Ebenen

An der Organisation
wird in jeden Funktionsaufruf eingetragen — für Werte, die mehrere Funktionen brauchen (gemeinsamer Token, Tenant-ID, Basis-URL).
An der Funktion
gilt nur für diese Funktion. Export-Vorteil: beim Funktions-Export werden die Deklarationen mitgegeben, nicht die Werte — sicherer Import in andere Orgs ohne Geheimnis-Transfer.
Priorität: Bei exakt gleichem Namen gewinnt die Organisation — sie überschreibt den Funktionswert. (PH „Priorität")
Gleiche Namen können nützen, aber auch verwirren. Für kritische Werte Namenskonventionen nutzen, z. B. CRM_API_TOKEN, GRAPH_CLIENT_SECRET, GOOGLE_SERVICE_ACCOUNT_JSON.
✎ Frage: Eine Funktion hat api_token=dev, die Organisation api_token=prod. Welcher Wert läuft?

✓ Das hast du jetzt verstanden

Stufe 3 von 6

timeout & robuste Verwendung

Validieren, aber nichts verraten.

1Die vordefinierte Variable timeout

timeout (int, Sekunden) überschreibt den Funktions-Timeout. Default 600 s (10 min). Nur an der Funktion wirksam — an der Organisation gesetzt wird er ignoriert. Sinnvoll für Funktionen, die viele/aufwendige AI-Services oder externe Dienste aufrufen. (PH „Vordefinierte Umgebungsvariablen")

2Validieren ohne zu loggen

getModule("log");

if (!api_token || typeof api_token !== "string" || api_token.trim() === "") {
  log_error("Pflichtvariable api_token fehlt");
  return "FEHLER: API-Konfiguration fehlt.";
}

var cleanToken = api_token.trim();
log_info("Konfiguration geprüft");
return "bereit";
Regel: Variablen validieren, aber Werte nicht loggen. Fehlermeldungen sollen Betreibern helfen, ohne Geheimnisse preiszugeben.
✎ Frage: Warum ist log_info("Token: " + api_token) falsch, obwohl der Wert aus einer Umgebungsvariable kommt?

✓ Das hast du jetzt verstanden

Stufe 4 von 6

Vertrauliche Werte

Maskierung ist kein Secret-Safe.

1Die Checkbox „Vertraulich"

Beim Anlegen/Bearbeiten einer Umgebungsvariable gibt es „Vertraulicher Wert (in Tabelle maskiert)": die Übersicht zeigt dann ********, der Klartext erscheint nur im Edit-Dialog. (PH „Vertrauliche Werte")

Reiter Umgebungsvariablen (offizielle Abbildung aus dem Admin-Handbuch) mit maskierten Werten
Offizielle Abbildung aus dem Admin-Handbuch (Kap. 9) — der Reiter „Umgebungsvariablen" auf Org-Ebene; vertraulich markierte Werte erscheinen in der Tabelle als ********.
Wichtige Grenze: Die Maskierung schützt nur vor Über-die-Schulter-Schauen. Der Klartext bleibt trotzdem:
• im Klartext in der Datenbank gespeichert,
• über die REST-API unmaskiert zurückgegeben,
• in den Browser-DevTools (Netzwerk-Tab) sichtbar.
Für hochkritische Geheimnisse einen separaten SecretManager verwenden.
Merksatz: nicht „Vertraulich macht Secrets sicher", sondern „Vertraulich maskiert die UI-Tabelle, ersetzt aber keinen Secret-Safe."
✎ Frage: Welche Gefahr bleibt, obwohl die Tabelle nur ******** zeigt?

✓ Das hast du jetzt verstanden

Stufe 5 von 6

Secret-Leak-Pfade & organisation-Modul

Wo Geheimnisse heimlich auftauchen.

1Das organisation-Modul

organisation_getOrganisation() liefert eine Kopie der ausführenden Organisation — mit sensiblen Feldern im Klartext. (PH „Organisation Modul")

getModule("organisation");
var org = organisation_getOrganisation();

Sensible Felder u. a.: Env, EnvConfidential, ADConfig.MsgraphClientSecret, TeamsBotConfig.MsAppPassword. Diese dürfen nicht in Logs, Antworten oder ungesicherten externen Aufrufen erscheinen.

Betriebsregeln: nie komplette Konfigurationsobjekte loggen · nie JSON.stringify(org) zurückgeben · nur benötigte Felder lesen · bei Fehlern generische Meldungen · Debug-Ausgaben nach Tests entfernen.

2Vorher / Nachher

// Falsch:
log_info(JSON.stringify(org));

// Besser:
log_info("Organisation geladen: " + org.Name);
✎ Frage: Warum kann ein harmlos wirkendes JSON.stringify(org) ein Secret-Leak sein?

✓ Das hast du jetzt verstanden

Stufe 6 von 6

aiserviceresults in Workflows

Ergebnisse vorheriger Schritte.

1Die globale Variable

Läuft eine Funktion als Schritt eines AI-Workflows, stellt AuxData die Ergebnisse aller vorherigen Schritte als globale Variable aiserviceresults bereit — ohne getModule(...). (PH „Ergebnisse vorheriger Workflow-Schritte")

Typ
Array<string> oder null (außerhalb eines Workflow-Kontextes).
Reihenfolge
chronologisch; [0] = ältester, [length-1] = direkt vorheriger Schritt.
Inhalt
das Result-Feld des jeweiligen AI-Service-Ergebnisses als String.
if (aiserviceresults === null || aiserviceresults.length === 0) {
  return "Kein vorheriger Schritt vorhanden.";
}
var letztesErgebnis = aiserviceresults[aiserviceresults.length - 1];
return "Vorheriges Ergebnis war: " + letztesErgebnis;
Sicherheit: Vorherige Schritte können personenbezogene/vertrauliche Inhalte enthalten — nicht ungeprüft loggen, nicht ungefiltert an externe Dienste senden, bei Zusammenfassungen auf Datenminimierung achten.

Konfiguration, Secrets & Workflow-Daten getrennt

Du trennst Betriebswerte, Geheimnisse und Workflow-Daten sauber vom Funktionscode. Damit ist Track E um Secret-Betrieb und Workflow-Kontext vertieft. Für die Lernbestätigung gibt es den Track-E-Kompetenzcheck.

✎ Frage: Was liefert aiserviceresults außerhalb eines Workflow-Kontextes?

✓ Das hast du jetzt erledigt

Kurz-Quiz

Sitzt der Secret-Betrieb?

8 Fragen aus den Stufen 1–6. Kein Zertifikat — zur Selbstkontrolle. Beliebig oft wiederholbar.

Frage 1 von 8
Lade Frage…