So schützen Sie eine Web-API vor Datenabruf, nicht vor dem Ressourcenbesitzer

8

Ich habe eine asp.net Web API.

Ich möchte Selfhost meine Web API später auf einer azurblauen Website besitzen.

Ein angemeldeter Benutzer könnte dies im Browser /api/bankaccounts/3

tun

um alle Details über bank account number 3 zu erhalten.

Aber der eingeloggte Benutzer ist nicht der Besitzer von bank account number 3 .

Wie muss ich meine Controller und die dahinter stehenden Dienste entwerfen?

im Benutzer kann nur seine eigenen Ressourcen in der Datenbank abrufen / ändern?

AKTUALISIEREN

Nachdem ich ein:

erstellt habe %Vor%

Die Frage ist nun, dass der IsResouceOwner für einen bestimmten Dienst fest codiert ist = & gt; SchooleearService ist somit an die Schooleear SQL-Tabelle gebunden

Ich muss die IsResourceOwner-Methode generisch für alle SQL-Tabellen mit einem Feld UserId / UserEmail beibehalten.

Das Problem ist - und ich denke wirklich, dass niemand so vorgeht -, dass ich jede Ressourcenbesitzerprüfung der richtigen Sql-Tabelle in der HasUserPermission-Methode zuordnen muss.

Wie sollte dieses Mapping aussehen?

Überprüfen Sie den Controller-Namen "SchooleearController", also ist die zu überprüfende Tabelle die "Schoolyear" -Tabelle? Das ist lächerlich.

Dieses benutzerdefinierte Attribut "UserActionsAuthorizationFilter" befindet sich auf jedem "Data" -Controller.

Welche Controller-URL der Benutzer auslöst, um Daten abzurufen, bevor ich überprüfen muss, ob er Ressourcenbesitzer ist.

Ich denke, ich kann das nicht innerhalb eines Filters entscheiden.

Ich muss die Datenabfrage / -modifikation durch den Controller gehen lassen und den ResourceOwner-Check innerhalb eines Repositorys machen, kurz bevor der Datenabruf erfolgt.

Was halten Sie davon?

API

%Vor%

REPO

%Vor%
  • Für die Get-Methode wird für die falsche UserId
  • nichts zurückgegeben
  • Für die Methode Create: kein Problem, jeder sollte in der Lage sein, eine Ressource zu erstellen, wenn er eingeloggt ist.
  • Für die Update-Methode: wie bei der Delete-Methode wird das Schuljahr mit ID und UserId abgerufen.

Im Allgemeinen sollte jede Methode in meinem Repository die UserId in der CRUD-Aktion berücksichtigen.

Was denkst du?

    
Elisabeth 13.06.2015, 09:56
quelle

1 Antwort

0

Siehe den folgenden Link - er behandelt sowohl die Authentifizierung (damit Sie wissen, wer anfragt) als auch die Autorisierung (damit Sie wissen, ob sie berechtigt sind, die Daten zu sehen):

Ссылка

Um ein anderes Detail hinzuzufügen - es wäre sehr üblich, Spalten und / oder Tabellen in Ihrer Datenbank zu haben, die die Autorisierung von Benutzern definieren. Es ist auch möglich (abhängig von Ihrem Authentifizierungsmechanismus), dass der Authentifizierungsanbieter "Ansprüche" oder andere Informationen bereitstellt, die definieren, auf was der Benutzer zugreifen darf. Dies könnte jedoch möglicherweise weniger sicher sein, da Sie wirklich auf die Quelle dieser Informationen vertrauen und sicherstellen müssen, dass sie nicht manipuliert wurde, bevor Sie sie an Ihre API senden.

    
snow_FFFFFF 13.06.2015 13:20
quelle