ASP.NET Identity mit mehreren Anwendungen

8

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

    
Marco 02.04.2015, 14:44
quelle

3 Antworten

7

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:

  1. Fügen Sie AppId allen Nutzernamen
  2. hinzu
  3. Fügen Sie eine 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.

    
MotoSV 05.04.2015, 16:45
quelle
2

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.

    
Shoaib Shakeel 05.04.2015 16:05
quelle
-2

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"> Ссылка

    
TRIKI Khaled 02.04.2015 14:55
quelle