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 ich ASP.NET Core Identity im Schichtenmodell mit eigenem Service nutzen?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Wie kann ich ASP.NET Core Identity im Schichtenmodell mit eigenem Service nutzen?

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
JimStark
myCSharp.de-Mitglied

Dabei seit: 10.03.2020
Beiträge: 61


JimStark ist offline

Wie kann ich ASP.NET Core Identity im Schichtenmodell mit eigenem Service nutzen?

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

Hi,

ich greife auf eine Datenbank über einen eigenen Service zu, d.h. dass das eigentlich recht abgekoppelt von ASP läuft. Jetzt möchte ich einen ganz simplen Login Mechanismus einbauen. (ohne Registrierung, Passwort vergessen, etc.)
Hierfür wäre ja Identity ganz sinnvoll, in den meisten Beispielen wird aber recht viel mit dem Grundgerüst Generator, etc. gemacht. Außerdem wird wieder die eingebaute Contextverwaltung genutzt:

C#-Code:
public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<MyIdentityDbContext>(options =>
        options.UseSqlServer(config.GetConnectionString
        ("DefaultConnection")));
    services.AddIdentity<MyIdentityUser, MyIdentityRole>()
        .AddEntityFrameworkStores<MyIdentityDbContext>()
        .AddDefaultTokenProviders();
    services.AddMvc();
}

Wie baue ich das am besten um, um einen eigenen Service zu nutzen? Oder ist es empfehlenswert für Userdaten den eingebauten Service zu nutzen?
Ich bin noch etwas Flask-User (Python) gewöhnt, da war das extrem einfach und anpassbar, in ASP.NET kommt mir das alles immer ziemlich überladen vor.

Danke!
04.06.2020 11:44 Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.938
Herkunft: Stuttgart/Stockholm


Abt ist offline

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

Es wäre super, wenn Du Dir aneignest vorher mal die offizielle Doku zu lesen, bevor Du ein Thema erstellst. Auch wenn ich mich damit erneut wiederhole ;-)
 [Hinweis] Wie poste ich richtig?

 Introduction to Identity on ASP.NET Core
Alle, ausnahmslos alle Fragen, die Du hier gestellt hast, sind in den ersten Kapiteln beantwortet.

Der Punkt "eigener Service" siehst Du in der Region "Customizing Identity".
Ob die Quelle nun eine Datenbank ist, wie es die Doku exemplarisch zeigt; spielt für den erweiterbaren Mechanismus keine Rolle.


Flask mit ASP.NET Identity zu vergleichen ist halt wie Trabbi vs. Porsche.
04.06.2020 13:01 Beiträge des Benutzers | zu Buddylist hinzufügen
Taipi88 Taipi88 ist männlich
myCSharp.de-Mitglied

avatar-3220.jpg


Dabei seit: 02.02.2010
Beiträge: 1.008
Entwicklungsumgebung: VS 2010
Herkunft: Mainz


Taipi88 ist offline

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

Hi,

den Identity-Kram von Microsoft kann man zwar mit einer eigenen Datenzugriffstechnologie nutzen - es kann hier auch etwas umfangreicher werden.

Grundlegend:
Du musst einen eigenen IdentityStore schreiben, der (bei mir) folgende Schnittstellen implementiert:
IUserPasswordStore<IdentityUserEntity>, IUserClaimStore<IdentityUserEntity>, IRoleStore<IdentityRoleEntity>, IUserSecurityStampStore<IdentityUserEntity>, UserRoleStore<IdentityUserEntity>, IUserLoginStore<IdentityUserEntity>, IUserEmailStore<IdentityUserEntity>, IUserPhoneNumberStore<IdentityUserEntity>, IUserTwoFactorStore<IdentityUserEntity>, IUserLockoutStore<IdentityUserEntity>

Wie man das alles implementiert und anpasst - hängt prinzipiell von dir ab - aber die von Abt verlinkten Stellen waren bei mir vollkommen ausreichend um es auf meine Bedürfnisse mit eigenen Datenschnittstellen anzupassen.

Kann dir zwar ein Beispielprojekt verlinken - aber um ehrlich zu sein wird dich das nicht entscheidend weiter bringen, da es im Prinzip alles Boiler-Plate-Code ist um die bereits genannten Schnittstellen mit der eigenen Schnittstelle zu implementieren...

LG
04.06.2020 16:01 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.938
Herkunft: Stuttgart/Stockholm


Abt ist offline

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

Der "kleinste" User Store ist

C#-Code:
public class MyUserStore : IUserEmailStore<MyUser>, IUserPasswordStore<MyUser>
04.06.2020 16:17 Beiträge des Benutzers | zu Buddylist hinzufügen
JimStark
myCSharp.de-Mitglied

Dabei seit: 10.03.2020
Beiträge: 61

Themenstarter Thema begonnen von JimStark

JimStark ist offline

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

Hi,

danke erstmal euch.
Ein Beispiel für den Store wäre ja z.B. das  https://docs.microsoft.com/de-de/aspnet/...=aspnetcore-3.1

Die Frage ist ob es sich rentiert.
Habe Identity jetzt soweit eingebunden, aber halt über serices.AddDbContext
Vielleicht belasse ich es erstmal für User in einem separaten Context, da es eh nur wenige User gibt und ein einziger Admin diese nur bearbeitet.

Danke euch beiden
04.06.2020 17:45 Beiträge des Benutzers | zu Buddylist hinzufügen
JimStark
myCSharp.de-Mitglied

Dabei seit: 10.03.2020
Beiträge: 61

Themenstarter Thema begonnen von JimStark

JimStark ist offline

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

Hier zu noch eine Frage:

Wenn ich die User SQLite Datei lösche und den Server neustarte kommt ein Fehler.
Die Identity Datenbank muss ich mit "Update-Database" mit der PM-Konsole initalisieren.
Kann ich das auch programmgesteuert machen, dass mein Programm die Datenbank erstellt wenn sie nicht vorhanden ist?
Oder wie macht man das wenn das Programm beim Kunden liegt und man es einrichten will ohne Migrations, etc.?
19.06.2020 16:05 Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.938
Herkunft: Stuttgart/Stockholm


Abt ist offline

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

Ne Sqlite Datei nimmt man prinzipiell gar nicht, weil Du normalerweise keinerlei Schreibrechte im ASP.NET Betriebsverzeichnis hast.
Den Rest kannst Du Dir selbst aus der  EF Core Doku entnehmen. Alternativ eben nen ordentlichen DevOps Deployment Prozess beim Kunde.

Dahingehend auch mein Reminder, einfach mal die Doku zu lesen.
Da sind potentielle Lösungen für solche Szenarien beschrieben.
19.06.2020 16:08 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 02.07.2020 21:52