myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Web-Technologien » Wie kann eine Blazor WASM mit IdentityServer4 den Token im Localstorage abspeichern?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Wie kann eine Blazor WASM mit IdentityServer4 den Token im Localstorage abspeichern?

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Khalid Khalid ist männlich
myCSharp.de-Poweruser/ Experte

avatar-2534.gif


Dabei seit: 19.07.2005
Beiträge: 3.508
Entwicklungsumgebung: Visual Studio 15/17
Herkunft: Hannover


Khalid ist offline

Wie kann eine Blazor WASM mit IdentityServer4 den Token im Localstorage abspeichern?

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Moin zusammen,

ich beschäftige mich seit geraumer Zeit mit Blazor und bin jetzt an dem Punkt angekommen, meine Test-Anwendung gegen einen IdentityServer4 zu authorisieren. Das funktioniert sogar auch problemlos. Allerdings stoße ich gerade auf ein Problem, zu dem ich nichts finde, oder ich einfach nur falsch verstehe.

Also, wenn der JWT Token vom ID4 zurückgeliefert wird, wird diese Information in den Session Storage geschrieben. Sprich, wenn ich den Browsertab schließe und einen neuen öffne, muss ich mich erneut einloggen. Das ist natürlich später für die User nicht tragbar. Blazor nutzt im Hintergrund die oidc-client.js Library. In einer vorherigen Test-Anwendung über vuejs konnte man in den UserSettings des oidc-clients den userStore mit angeben:

Code:
1:
"userStore": new WebStorageStateStore( { store: localStorage }

Diese Möglichkeit scheint es innerhalb von Blazor nicht zu geben. Innerhalb der BlazorApp initialisiere ich die Services via

Code:
1:
builder.Services.AddApiAuthorization(x => x.ProviderOptions.ConfigurationEndpoint = "oidc.json");

In der oidc.json stehen alle weiteren Metainformationen

Code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
{
  "authority": "https://localhost:5000",
  "client_id": "blazor",
  "redirect_uri": "http://localhost:5001/authentication/login-callback",
  "post_logout_redirect_uri": "http://localhost:5001/authentication/login-callback",
  "response_type": "code",
  "scope": "openid profile email",
  "userStore": "new WebStorageStateStore({ store: localStorage})" // das geht hier so natürlich nicht
}

Hier kann der userStore nicht überschrieben werden, da es hier ja als String interpretiert wird.

Weiß irgendwer, wie ich Blazor (bzw. den oidc-client dahinter) dazu verdonnere, den localStorage zu verwenden anstatt den sessionStorage? Oder macht man das erst gar nicht? Und wenn ja, wie schaffe ich es das der User sich nicht jedesmal neu anmelden muss?

Gruß
Khalid
03.06.2020 17:05 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 14.294
Herkunft: BW


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Die Metainformationen kommen von Remote, zB vom Server.
Es ist ja nur Optional, dass man das auch lokal anpassen kann.

Daher macht der User Store in den Konfigurationen kein Sinn, da das Protokoll ja Technologie-neutral ist.

Ich hab nun schon paar Wochen kein Blazor nicht gemacht, aber ich kenne es noch so, dass man den ILocalStorageService verwendet und der Token hier persistiert wird.
In anderen Fällen habe ich auch schon eigen geschriebene Storage- oder StateProvider auf Basis vom  AuthenticationStateProvider gesehen.

Man muss bei Blazor bedenken, dass das Framework zwar ASP.NET sehr ähnelt, aber im Endeffekt muss man das wie eine Deskop Applikation, die im Browser läuft, programmieren.
04.06.2020 09:25 Beiträge des Benutzers | zu Buddylist hinzufügen
Khalid Khalid ist männlich
myCSharp.de-Poweruser/ Experte

avatar-2534.gif


Dabei seit: 19.07.2005
Beiträge: 3.508
Entwicklungsumgebung: Visual Studio 15/17
Herkunft: Hannover

Themenstarter Thema begonnen von Khalid

Khalid ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Moin,

so, ich hab mir das jetzt alles mal versucht weiter detailliert anzuschauen. Sobald man eine eigene Implementierung des AuthenticationStateProviders in die Services legt und gleichzeitig die von MS zur Verfügung stehenden Extensions "AddApiAuthorization" oder "AddOidcAuthorization" verwendet, knallt es an jeder Ecke. Scheinbat castet er im Hintergrund immer auf die von ihm eigentlich injizierte Instanz des AuthenticationStateProviders.

Auch wenn es wahrscheinlich bekloppt ist, habe ich jetzt angefangen eine eigene Implementierung rund um die oidc-client Library zu schreiben und nicht die von MS bereitgestellten Mittel zu verwenden.

Aber da es eh meine ersten Gehversuche in Blazor sind, ist das ein ganz nettes kleines Projekt um besser die Mechaniken in Blazor zu verstehen.

Gruß
Khalid
05.06.2020 08:15 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 5 Monate.
Der letzte Beitrag ist älter als 5 Monate.
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 30.11.2020 12:04