Authentification individual -

  • C# (ASP)
  • (Core) Blazor Server

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von MasterQ.

    Authentification individual -

    Moin,

    ich bastele an einer Blazor Anwendung und möchte Authentifizierung verwenden. Dazu reicht für mich die Version "individual", da das Ganze nur in einem kleinem Rahmen innerhalb eines Heimnetzwerkes laufen soll.

    Soweit funktioniert das alles.

    Wenn man auf Login oder Register auf der Hauptseite des Blazor-Templates geht, kommen Seiten auf, die ich im Projekt nicht finden kann. Es handelt sich also wohl um fest verdrahtete Seiten, die aus ASP.NET kommen. Das find ich jetzt nicht so vorteilhaft weil:
    • ich das gerne in Deutsch hätte
    • das in mein Layout passen sollte
    • ich kein Register brauche, Login reicht.

    Wie komme ich hier weiter? Ich würde mir ja eine eigene Login-Seite basteln, aber im Template Code werden Seiten angesprungen, die es so gar nicht gibt. Von daher bin etwas ratlos. Auch der ganze Mechanismus mit dem Abfragen des Passwortes ist verborgen. Warum eigentlich?

    Ich bin nicht so der Experte auf dem Gebiet. Mir die Funktionsweise am Template abschauen, geht nicht. Oder ich steh völlig auf dem Schlauch.

    Gruß

    J.
    So hatte ich's gemacht:

    Quellcode

    1. dotnet new blazorserver -au individual -o meinprojekt


    Bei dem angegebenen Link steht für meinen Fall (Server Side Blazor) oben

    Install the Microsoft.VisualStudio.Web.CodeGeneration.Design NuGet package.

    Ich bin aber nicht mit VS unterwegs, nicht mal Windows. Von daher schau ich mal, ob mir dies weiter hilft. Ich bin erstaunt, was bei VS gar nicht wirklich C#, sondern exklusiv VS ist und in anderen Entwicklungsumgebungen nicht zur Verfügung steht oder deutlich anders gelöst ist.
    Die Info wäre gleich im Startpost hilfreich gewesen ;)
    Ich habe zum Test mal auch per CLI ein neues Projekt erstellt und habe nachträglich die Seiten für Identity (auch per CLI) erstellen lassen: Scaffold Identity in ASP.NET Core projects | Microsoft Learn
    Dein Projekt ist also bereits mit Authentifizierung konfiguriert. Du kannst dann einfach nachträglich die gewünschten Seiten erstellen lassen - z.B. mit

    Quellcode

    1. dotnet aspnet-codegenerator identity --files "Account.Register;Account.Login;Account.Logout"

    Das erstellt dir die Templates für Registrieren, Ein- und ausloggen.


    Mit

    Quellcode

    1. dotnet aspnet-codegenerator identity --listFiles
    kannst du dir alle Dateien anzeigen lassen, die der files-Option zusätzlich übergeben werden können.
    Spoiler anzeigen

    Quellcode

    1. ​Account._StatusMessage
    2. Account.AccessDenied
    3. Account.ConfirmEmail
    4. Account.ConfirmEmailChange
    5. Account.ExternalLogin
    6. Account.ForgotPassword
    7. Account.ForgotPasswordConfirmation
    8. Account.Lockout
    9. Account.Login
    10. Account.LoginWith2fa
    11. Account.LoginWithRecoveryCode
    12. Account.Logout
    13. Account.Manage._Layout
    14. Account.Manage._ManageNav
    15. Account.Manage._StatusMessage
    16. Account.Manage.ChangePassword
    17. Account.Manage.DeletePersonalData
    18. Account.Manage.Disable2fa
    19. Account.Manage.DownloadPersonalData
    20. Account.Manage.Email
    21. Account.Manage.EnableAuthenticator
    22. Account.Manage.ExternalLogins
    23. Account.Manage.GenerateRecoveryCodes
    24. Account.Manage.Index
    25. Account.Manage.PersonalData
    26. Account.Manage.ResetAuthenticator
    27. Account.Manage.SetPassword
    28. Account.Manage.ShowRecoveryCodes
    29. Account.Manage.TwoFactorAuthentication
    30. Account.Register
    31. Account.RegisterConfirmation
    32. Account.ResendEmailConfirmation
    33. Account.ResetPassword
    34. Account.ResetPasswordConfirmation
    Danke für den Hinweis.

    Ich probiere grad mit rum und habe ein Problem. Läuft das bei dir? Bei mir nicht! Ich habe allerdings auch als dbProvider sqlite angegeben. Aber das kann mit meinem Problem nix zu tun haben.


    Sobald ich die Dateien mit dem Codegenerator erzeugt habe und das Projekt starte, kommt im Browser folgende Meldung:


    An unhandled exception occurred while processing the request. InvalidOperationException: Cannot find the fallback endpoint specified by route values: { page: /_Host, area: }. Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.DynamicPageEndpointMatcherPolicy.ApplyAsync(HttpContext httpContext, CandidateSet candidates)

    Da aber direkt beim Start die neu erzeugten Dateien gar nicht relevant sind, d.h. nicht angesprochen werden, frage ich mich, was das zu bedeuten hat. Auch ein diff aller Dateien zeigt keine Auffälligkeiten. Also, warum kommt dann diese Ausnahme im Browser?
    Moin, ich hab das selbe vor ein, zwei Jahren erlebt. Ich dachte super easy einfach die Templet-Seiten etwas anpassen und fertig. Ist aber leider nicht so einfach, plus ich hab bis heute kein Plan von SQL. Meine gesamten Hobby-Projekte werden immer an der stelle komplex an der ich irgendwas mit Zugangsbeschränkung machen möchte.

    En/Decryption, save to DB (plus DB auch sichern), Bestätigungsemail an User, Neues generiertes Pwd an User falls altes Pwd vergessen, Timeouts, wie lange soll auf die Bestätigungsemail gewartet werden bevor die Email wieder freigegeben wird und vieles mehr.

    Falls Du wirklich diesen Weg gehen möchtest, mit diesem YT Link (gibt auch Github Code etc.) hab ich das alles zum Laufen gebracht. Eventuell müsstest Du noch die Videos der Serie davor und danach sehen, um alles nachzuvollziehen. Ist wie gesagt ein paar Jahre her. Etwas besseres hab ich damals nicht gefunden. Immer, wenn es um Authentication im echten Leben ging haben die Quellen nicht viel hergegeben.

    Falls Du 'nur' in sehr kleinem, privaten Bereich was machen möchtest. Würde ich das simpler machen, ohne Email und mit festen Passwörtern.

    Ich hab mir angewöhnt einen eigenen AppState-Service in Program.cs anzulegen. Einfach eine C# Class mit dem Namen AppState.cs. Diesen Service 'aktivieren' (in Blazor glaub ich Program.cs, da wo die Singeltons/Transients stehen).
    builder.Services.AddScoped<AppStateS>(); Diesen Service dann auf den Seiten injecten wo Du Authorization nutzen möchtest.

    pseudo code:
    -----------------------
    @page "/geheim"
    @inject AppState AppState

    @if(AppState.UserIsAuth)
    {
    meine geheimen infos
    }
    else
    {
    Navimanager.NavTo("/Loginpage")
    }

    Die Bool Variable AppState.UserIsAuth muss dann auf der Login Seite je nach Userangaben auf true/false gesetzt werden.

    ---
    Falls doch mit DB dann schau Dir mal LiteDB an die DB kann per Nuget in dein Project installiert werden und wird dann einfach mit dem Upload des Blazor Projektes auf den Server mit raufgeladen & kann einfach Listen von ganzen C#.Class Obj. speichern property Password, Name, ...
    Der Webspaceanbieter muss keine SQL DB stellen.


    Es ist ja immer schwer einzuschätzen, auf welchem Coding-Verständnis man selber ist im Vergleich zum Forums-Gesprächspartner. Bei Interesse, falls was unklar ist frage gerne.
    LG
    codewars.com Rank: 4 kyu
    Ja, bei mir funktioniert das ohne Probleme. Hast du denn unter Pages einer _Host.cshtml? Die scheint bei dir zu fehlen, bzw. innerhalb der Datei gibt es Fehler. In der Program.cs setzt er app.MapFallbackToPage("/_Host"); - daher dürfte der Fehler kommen. Bei diesem SO-Link kannst du auch noch mal schauen, ob du damit deinen Fehler beheben kannst.

    nogood schrieb:


    Falls Du 'nur' in sehr kleinem, privaten Bereich was machen möchtest. Würde ich das simpler machen, ohne Email und mit festen Passwörtern.


    Das ist eigentlich der Plan. Ich dachte, da das alles schon fertig auf Dosen gezogen ist, könnte ich darauf (abgespeckt) zurückgreifen. Wenn ich aber bedenke, wie lange ich jetzt daran schon rumschraube, hätte ich das anders wohl schneller haben können.

    Immer wenn es heißt, "grad mal eben" ... :cursing:




    Ja, bei mir funktioniert das ohne Probleme. Hast du denn unter
    Pages einer _Host.cshtml? Die scheint bei dir zu fehlen, bzw. innerhalb
    der Datei gibt es Fehler. In der Program.cs setzt er app.MapFallbackToPage("/_Host"); - daher dürfte der Fehler kommen. Bei diesem SO-Link kannst du auch noch mal schauen, ob du damit deinen Fehler beheben kannst.


    Ich habe eine _Host.cshtml. Wenn ich in Program.cs

    C#-Quellcode

    1. app.MapFallbackToPage("/");
    setze. also das _Host lösche, dann kommt immer noch die Meldung, diese mal aber etwas anders

    An unhandled exception occurred while processing the request. InvalidOperationException: Cannot find the fallback endpoint specified by route values: { page: /, area: }. Microsoft.AspNetCore.Mvc.RazorPages.Infrastructure.DynamicPageEndpointMatcherPolicy.ApplyAsync(HttpContext httpContext, CandidateSet candidates)

    das _Host ist in der Liste der nicht vorhandenen EndPoints weg, nur noch "/" und "area"

    Den Link gehe ich gleich mal durch

    --edit--
    leider kein Erfolg



    @ISliceUrPanties
    könntest du bitte das Projekt, das bei dir ja läuft, zippen und hier einstellen. Dann kann ich hoffentlich sehen, was da anders ist als bei mir. Im Moment komme ich nicht weiter.



    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „MasterQ“ ()

    Moin,

    ein neuer Tag, ein neues Glück.

    Keine Ahnung warum, aber die heute erzeugten Projekte funktionieren. Da hatte sich die Tage wohl was erheblich verschluckt.

    Heute hält sich alles an's Lehrbuch.

    :cursing:

    Also, nu ran ans eigentliche Projekt.

    Danke für die Tipps und den Beistand.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „MasterQ“ ()