2016-07-28 13 views
8

Lassen Sie uns sagen, dass ich ein Stück Code schreiben, die einen HTTP-Aufruf an einen Web api macht, so etwas wie:Was identifiziert einen Client eindeutig? Eine Anfrage an die Web-API senden?

$http.get('www.myapi.com/api/controller/endpoint').then(function(resp){...}) 

ich diesen Code zu zwei Personen dann geben, die in verschiedenen Städten leben und sie schlug meine API von ihren entsprechende Häuser (nur von einem Browser). Welche Informationen kann meine API von der http-Anfrage erhalten, die es mir erlaubt, die Person A und die Person B, die sie anruft, voneinander zu unterscheiden? Ist die IP immer verfügbar? Ist die MAC-Adresse jemals verfügbar? Was gibt es noch?

Wie kann Person A so tun, als wäre sie Person B, wenn sie meine API anruft?

Außerdem, was ist, wenn Person C meine Web-API von ihrer eigenen Web-API (Backend) aufruft? Wird die gleiche Information verfügbar sein, oder was wird anders sein?

Dies ist eine allgemeine Frage, aber wenn Sie spezifisch werden möchten, nehmen wir an, dass ASP.NET Web API 2 die HTTP-Anforderungen empfängt.

+0

Vielleicht zwei Cursor erstellen, die ineinander greifen? – Odonno

+0

Was versuchen Sie mit diesen Informationen zu erreichen? – mrmcgreg

+0

@mrmcgreg: Sichere Endpunkte, für die der Benutzer nicht angemeldet sein muss. Oder geben Sie uns zumindest eine Möglichkeit, böswillige Benutzer zu identifizieren und zu sperren. Im Moment versuche ich nur ein Gesamtbild zu bekommen. – VSO

Antwort

1

Mein Team hat dies erreicht, indem gefordert wurde, dass bei allen Anfragen ein Identifikationsheader enthalten sein muss. Dies erfordert einige Anpassungen seitens des Anrufers, erfordert aber nicht unbedingt, dass der Benutzer angemeldet ist. Natürlich könnte der Wert der Kopfzeile von böswilligen Benutzern geändert werden. Wenn diese Anrufe also sehr sicher sein müssen, werden Sie dies tun benötigen eine traditionelle Authentifizierung.

3

Sie beschreiben den Wunsch nach Vorauthentifizierung.

Die IP wird immer verfügbar sein. Sie können den Dienst auf nur diese IP-Bereiche beschränken. Es ist keine gute Möglichkeit, eine Authentifizierung durchzuführen.

Der Versuch, herumzukommen, Authentifizierung durchführen zu müssen, ist nicht sicher. Sie sollten eine geeignete Authentifizierungsmethode verwenden. Die Kombination von IP-Einschränkungen mit anderen Methoden ist in Ordnung.

John Meyers Antwort ist im Wesentlichen Pre-Shared-Token-basierte Benutzerauthentifizierung. Ein gültiges Token ist eine ständige Anmeldung. Das Token kann viel leichter kompromittiert werden als eine typische tokenbasierte Benutzerauthentifizierung, die ein temporäres Token mit einer begrenzten Lebensdauer erstellt.

Wenn Sie sich für die Pre-Shared-Token-Route entscheiden, verwenden Sie bitte eine Methode, die eine ordnungsgemäße Rotation oder Permutation des Tokens im Laufe der Zeit unterstützt, sodass es nicht anfällig für Replay-Angriffe ist.

Die beste Option für dieses Szenario ist eine typische Sitzungstoken-basierte Benutzerauthentifizierung.

Wenn Sie tatsächlich nicht interessiert, wer Ihren Dienst verwendet, nur, dass sie eindeutig identifiziert werden, können Sie sicher eine Sitzung (oder permanent, oder willkürliche Lebensdauer) etablieren Cookie pro Benutzer durch den http-Header, der Set-Cookie Alle Clients sollten automatisch respektieren und unterstützen und diese dann als Tracking-Methode verwenden.

0

Ich denke, Sie können immer mit vollständig authentifiziert gehen. Ich sehe Ihren Wunsch, sich für eine halb gesicherte Reihe von Endpunkten zu entscheiden, aber ich denke nicht, dass Ihnen dieser Ansatz am besten dienen würde. MAC, IP, User-Agent, benutzerdefinierte Felder alles kann gefälscht werden, um ehrlich zu sein. Mit einem Bearer-Token oder Session-Token zu gehen ist hier die einzige Wette. Für öffentliche Apis können Sie Benutzeranfragen auf Basis von ip beschränken oder Sie können herausfinden, ob eine bestimmte IP versucht, Sie auszunutzen und sie somit zu blockieren, aber eine echte Identität zu finden, ist sowieso nicht möglich.

1

Sie scheinen wirklich verwirrt darüber. Was Sie suchen, heißt Authentifizierung.

Wenn Sie C# getaggt haben, nehme ich an, dass Sie Ihre API in C# entwickeln. Ich empfehle die Überprüfung Web Api.

In diesen Tagen sind einige Authentifizierungsmethoden verfügbar. Wenn Sie eine Ruhe-API entwickeln, können Sie verwenden.

Sie können eine Menge Informationen über den Client erhalten, der Ihre API über http headers aufruft.