Hallo,
wo speichere ich eine Datenbankverbindung in einem solchen Programm
Habe aktuell im Web Projekt eine appsetttings.json auf die ich in der Web Applikation zugreifen kann
private readonly IConfiguration _configuration;
var myProperty = _configuration.GetSection("ConnectionStrings")["DefaultConnection"];
In der Windows Applikation ist diese aber null
if (myProperty == null)
{
myProperty = "Datenbank Verbindungsstring sollte hier eigentlich stehen"
}
Finde dazu leider nichts vielleicht kann mir jemand helfen. Schön wäre es wenn ich nur eine Config pflegen müsste für alle
Reden wir von einer externen Datenbank wie Azure SQL, POstgres und co?
Gar nicht. Eine Client-Application wie Du mit MAUI entwickelst sollte niemals direkt mit einer Datenbank kommunizieren, a) weil eine Datenbank niemals direkt offen im Internet stehen sollte und so gar nicht erreichbar ist und b) Du die Connection Credentials in der App brauchen würdest, und diese auslesbar wären.
Eine Client App sollte immer mit einer API Kommunizieren (der Pattern nennt sich Backend for Frontend oder simpler Client-Server) und der Server kommuniziert mit der DB.
Übliche Technologien sind zB REST via HTTP, oder GraphQL, oder GRPC...
In .NET gesprochen: Deine MAUI App kommuniziert mit einer Json API, die Du mit ASP.NET Core umsetzt und auf einem Server betreibst. Das ASP.NET Core Backend verbindet sich in seinem Kontext mit der Datenbank.
Eine intere App Datenbank wie zB via SQLite wird einfach über einen Pfad angesprochen.
Für generelles Option Handling gilt der Standard Option Pattern in .NET.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hallo,
ja kann man so umsetzen, dann stehe ich vor einem ähnlichen Problem, wo speichere ich die url zu API und den Username und Passwort für den Aufruf.
Bei einer normalen Windows Form Applikation spreche ich auch direkt mit der Datenbank und habe den Connectionstring in der App.config, natürlich ist es schöner via Rest ein Muss ist es jedoch nicht
Bei einer normalen Windows Form Applikation spreche ich auch direkt mit der Datenbank und habe den Connectionstring in der App.config, natürlich ist es schöner via Rest ein Muss ist es jedoch nicht
Ein Muss ist es dann, wenn Du gewisse Datenarten speicherst und verarbeitest. Dann sagt Dir der Gesetzgeber, dass Du einen Sicherheitsmechanismus verwenden musst, um die Daten zu schützen. Damit das Gesetz für die Zukunft seine Gültigkeit behält steht auch nur drin dass Du nach "Stand der Technik" dies auch aktuell halten musst. Sowohl für interne wie auch für externe / über das Internet verfügbare Anwendungen.
Macht man das nicht und wird erwischt / passiert was, muss man halt dafür gerade stehen.
Daher nein: auch bei einer Windows Forms App ist das schon lange nicht mehr Stand der Zeit und auch dort keine gute Idee.
Auch in Windows Forms verwendet man seit >10 Jahren kein Username-Password Flow mehr, der eben als unsicher gilt. Auch mit Windows Forms kann man moderne und sichere Authentifizierungsmechanismen wählen - in .NET seit ca 15 Jahren eingebaut.
ja kann man so umsetzen, dann stehe ich vor einem ähnlichen Problem, wo speichere ich die url zu API und den Username und Passwort für den Aufruf.
Wie gesagt; Option Pattern. Auch MAUI hat ne appsettings.json, die Du über den Option Pattern in der App nach Best Practise Prinzipien verfügbar machen kannst. James (.NET PM bei Microsoft) hat entsprechend ein Tutorial dazu (App Configuration Settings in .NET MAUI (appsettings.json)), direkt der erste Link wenn man nach MAUI appsettings sucht.
Generell gilt:
wo speichere ich die url zu API und den Username und Passwort für den Aufruf
Du hast keine Chance bei solch einer App die Settings sicher zu speichern, zumindest nicht in der App. Daher sind sie für Credentials auch nicht der richtige Platz. Username und Password Deiner Datenbank können bei solch einem Vorgehen über die Verbindung abgefangen bzw. einfach ausgelesen werden - egal ob MAUI oder Windows Forms.
Siehe auch Server-side security of sensitive data and credentials
Eine API hätte aber auch kein Username/Password, sondern solche HTTP APIs werden über Token-Verfahren abgesichert, zB OpenID/OAuth und der User muss sichn damit anmelden. Man schreibt nirgends irgendwelche Credentials in die Configs, wenn man es "richtig" macht. Ja das ist Aufwand - aber es ist eben auch Sicherheit.
Willst Du es trotzdem machen: dann schreib sie eben in die App Settings-Datei, mach Dir ne Settings-Klasse wie im gezeigten Link und greif über die IOptions auf Deine Konfigurationswerte zu.
Der Benefit von moderne Apps wie Blazor ist: Du hast keine Chance unsichere Mechanismen wie "Username Password-Flows" von Haus zu verwenden. Sie werden schlicht und einfach nicht mehr von Haus aus unterstützt. Du musst aktiv und bewusst unsichere Workarounds selbst umsetzen.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code