In Lektion M2.4 sind die Einstellungen des Auftragsbuchs aus App.config in appsettings.json umgezogen, und die Lektion hat versprochen: Kämen Geheimnisse hinzu, gehörten sie nie in diese Datei. Sie sind inzwischen hinzugekommen. Die Web-App aus Lektion M5.1 braucht Anmeldeinformationen, die Web-API soll sich bei Azure SQL anmelden, und die Hausordnung des Beispielprojekts verbietet Verbindungszeichenfolgen mit Kennwort in Git und in Paketen. Diese Lektion räumt auf: Sie klärt, was überhaupt ein Geheimnis ist, nimmt der Datenbankverbindung das Kennwort, legt die echten Geheimnisse in Key Vault und schließt dabei den Treiberwechsel ab, den Lektion M2.3 begonnen hat. Das Grundwissen zu Geheimnissen im Betrieb steht in K3, Modul 3.3 (Sicherheit im Betrieb).
Was ist überhaupt ein Geheimnis?
Ein Geheimnis ist ein Wert, mit dem sich jemand ausweisen kann: ein Kennwort, ein Schlüssel, ein Client-Geheimnis. Kennungen sind keine Geheimnisse. Die Mandanten-ID und die Client-ID einer Registrierung stehen in den Beispielen von Microsofts Dokumentation in appsettings.json. Die Inventur des Auftragsbuchs sieht so aus:
| Was | Geheimnis? | Ort |
|---|---|---|
| Mandanten-ID, Client-IDs, Bereiche der API | nein, Kennungen | appsettings.json |
| Stundensatz, Anfahrtspauschale, Mehrwertsteuersatz | nein | appsettings.json (Lektion M2.4) |
| Verbindung des Windows-Programms zu LocalDB | nein, Windows-Anmeldung ohne Kennwort | appsettings.json |
| Verbindung zu Azure SQL mit Microsoft Entra ID | nein, kein Kennwort in der Zeichenfolge | appsettings.json je Umgebung |
| Client-Geheimnis der Web-App (Lektion M5.1) | ja | Key Vault im Betrieb, Benutzergeheimnisse in der Entwicklung |
| Zugang zu weiteren Diensten (zum Beispiel der Blob-Speicher aus Lektion M4.5) | zuerst fragen, ob eine verwaltete Identität reicht | verwaltete Identität, sonst Key Vault |
Die wichtigste Zeile steht nicht in der Tabelle: Das Windows-Programm bekommt gar nichts. Microsofts Dokumentation zu Büroprogrammen mit geschützter API sagt: kein Datenbankkennwort, kein Client-Geheimnis, keine geschützte Verbindungszeichenfolge in einem Desktop-Programm, denn jeder, der das Programm hat, kann es herausholen. Je mehr Formulare die API aus Lektion M4.2 rufen, desto weniger Verbindungen braucht das Programm, bis es keine mehr hat.