Deshalb entwickelt unsere Organisation einige neue Web-Apps mit asp.net mvc und web api. Wir haben uns entschieden, das Active Directory nicht für Authentifizierungs- / Autorisierungszwecke zu verwenden, so dass es aussieht, als würde die asp.net-Identität mit dem Entity-Framework funktionieren.
Beim Betrachten des Datenbankschemas sehe ich keine Anwendungstabelle, daher können wir ein zentrales Repository für Benutzeranmeldeinformationen und Anwendungszugriff haben. kommen hier Ansprüche? Wie würde das aussehen? Benutzer - & gt; App - & gt; Rolle - & gt; Berechtigungen
Eines unserer Ziele ist es, Nutzern auch die einmalige Anmeldung zu ermöglichen. Ist das mit den neuen Bearer Tokens möglich?
danke für jede Hilfe, die Sie zur Verfügung stellen können
Sehen Sie sich dieses Tutorial an. Es zeigt, wie ASP.NET Identity mit Web API zu implementieren:
Zum Umgang mit mehreren Anwendungen. Zwei Ansätze, die mir einfallen, sind:
AppId
allen Nutzernamen AppId
-Spalte zu AspNetUsers
table hinzu, leiten Sie von UserStore
ab und implementieren Sie die Find
basierten Methoden neu, damit die Abfragen die AppId
berücksichtigen.
Für # 1, wenn die Anwendung einen neuen Benutzer erstellen möchte, würde sie eine Anfrage an das WebApi senden, die die neuen Benutzerinformationen und ein AppId
enthält. Der WebApi würde dann die UserName
und AppId
verketten, um den vollständigen Benutzernamen zu erstellen, der in die Datenbank geschrieben wird. Wenn die Anwendung 1234
also einen Benutzer mit dem Benutzernamen myuser
erstellen möchte, erstellt der WebApi einen neuen Benutzer mit dem Benutzernamen myuser_1234
. Von diesem Zeitpunkt an, wenn Sie die Datenbank abfragen, würden Sie zuerst die UserName
und AppId
von der Anfrage nehmen, sie verketten und dann die Datenbank abfragen.
Wenn eine andere Anwendung 9900
eine myuser
erstellen möchte, wäre der letzte in die Datenbank geschriebene Benutzername myuser_9900
.
Sie können die Anwendungsdetails in der Datenbank speichern und für jede Anfrage das AppId
validieren, um sicherzustellen, dass Sie die Anwendung vor der Verarbeitung ihrer Anfrage erkennen.
Ich habe nicht viel von Schritt # 2 gedacht, also ist es nur ein Vorschlag.
Wenn Sie die Benutzeranmeldeinformationen für mehrere Anwendungen freigeben möchten, können Sie wahrscheinlich die oben genannten Optionen ignorieren, Standardfunktionen verwenden und alle Anwendungen auf dieselbe Datenbank verweisen, sodass alle Anwendungen unabhängig von der erstellten Anwendung auf alle Benutzer zugreifen können welcher Benutzer.
UPDATE # 1: In diesem Fall könnten Bearer Tokens verwendet werden und ich denke (aus dem Speicher gehend) berührt die oben erwähnte Tutorial-Serie dies und wie ein einzelner WebApi Tokens für mehrere Anwendungen bereitstellen kann.
Ihre Benutzer und ihre Anmeldeinformationen werden in AspNetUser
table und Rollen in ASPNetRole
gespeichert, während AspNetUserRole
als Verbindungstabelle zwischen den beiden Benutzern und Rollen dient. Sie können SSO (Single Sign On) implementieren, indem Sie diese Tabellen in Ihren Anwendungen freigeben. Wie jede Anwendung muss diese Tabellen und Rollen lesen und Benutzer anmelden. Ein besserer Ansatz wäre jedoch, einen zentralen WebApi zu erstellen, um die Benutzerauthentifizierung und -autorisierung durchzuführen.
Auch wenn Sie Rollen zur Laufzeit ändern können, haben Sie eine Idee mit Berechtigungen. Sie können eine benutzerdefinierte Tabelle zum Speichern von Berechtigungen erstellen und dann Rollen Berechtigungen zuordnen. Und wenn der Benutzer sich anmeldet, laden Sie einfach alle seine Berechtigungen und speichern Sie als Ansprüche. Sie können entweder die gesamte Rolle (mit ihrer Berechtigungsliste) serialisieren und sie als einen Anspruch speichern. Oder speichern Sie jede Berechtigung als individuellen Anspruch, je nachdem, was Ihnen am besten passt.
Für die einmalige Anmeldung ist es möglich, Cookies zu teilen oder einen anderen Sitzungszustand zu verwenden, z. B. <sessionState mode="SQLServer">
oder <sessionState mode="StateServer">
Ссылка
Tags und Links asp.net-mvc asp.net-web-api single-sign-on asp.net-identity