Entwickler-Ecke

ASP.NET und Web - REST-API mit Request-URL-Prüfung


Froschkoenig84 - Mi 14.11.18 19:56
Titel: REST-API mit Request-URL-Prüfung
Hallo. :)

Zunächst einmal, ich bin noch kein C#/ASP.NET-Profi.

Ich plane eine relativ einfache REST-API die als Controller zwischen den JS-Clients (JS-Requests) meiner Kunden (bestimmte Kunden-URLs) und meiner serverseitigen Datenbank (BSON/JSONB).

Zunächst sollen folgende Dinge geprüft werden:
  1. Passen [URL] und [ClientToken] zusammen? - Also ob der Request überhaupt valid/accepted ist.
  2. Hat der angemeldete Benutzer (via [UserToken]) die nötige Berechtigung, um auf den Controller (Database), Action (Collection), Index (SingleElement) zuzugreifen?
  3. Sind alle notwendigen Übergabe-Parameter gesetzt, bzw. sind diese gültig/anwendbar?


Jeder Request soll folgende Token mitsenden:
  1. ClientToken (identifiziert den Kunden, der es bei sich auf der Website einbaut und überprüft den Referer/RemoteAddr/RemoteHostIp mit der im Kundenbereich hinterlegten URL)
  2. UserToken (jeder in meinem System registrierte Benutzer erhält nach dem Login einen lebenslänglichen UserToken, ggf. zusätzlich noch eine SessionId)
  3. RequestToken (bei jedem Request wird ein Token mitgesendet, der den Request identifiziert und somit auch serverseitig dokumentiert)


Der ClientToken repräsentiert quasi den Referer, bzw. den Kunden, der Zugriff auf meine API hat.
Der RequestToken ist erstmal rein optional und mehr eine ID, als ein echter Token.
Ob es überhaupt eine Session-ID benötigt weiß ich auch noch nicht.


Zu meiner Frage...

Ist es möglich in der Global.asax einen der folgenden Werte sicher abzufragen...
...um die URL des abrufenden REQUESTs zu prüfen?


Denn irgendwie muss ja ermittelt werden können, von welcher URL (oder zumindest IP-Adresse) aus, der Request abgesendet, bzw. der Response angefordert wurde.
Ich möchte eben verhindern, dass irgendein http://www.gemeiner-mitbewerber.com auf meine API zugreifen kann, indem er sich einfach das Script inkl. ClientToken von einer Kundenseite auf seine eigene Website herüber kopiert.


Falls da jemand eine Lösung hat, immer her damit.
Ich werde außerdem mal prüfen ob Apache, nginx, IIS oder Kestrel bereits einen HostnameLookup überprüft und ggf. Regeln befolgt, wie Zugriff nur für [LISTE VON URLS].
Aber irgendwie würde ich es dann trotzdem gerne nochmal in meiner API prüfen.

Besten Dank im Voraus. :)