2016-05-12 8 views
0

Ich baue eine Reihe von Web-Services mit C# und der Web-API. Auf die Dienste kann über mehrere Web-Apps und mehrere native Apps zugegriffen werden. Die Anwendung verwaltet eine Liste autorisierter Domänen und eine Liste autorisierter Anwendungs-IDs (die mit nativen Apps verwendet werden sollen).Web-API - Erkennen der Client-Domäne

Ich bin auf der Suche nach einer Möglichkeit, die Domäne zu erkennen, auf der eine Webanwendung gehostet wird, so dass ich diesen Domänennamen mit meiner Liste der autorisierten Domänen vergleichen kann. Bis jetzt sind die einzigen Eigenschaften, die ich im Anforderungskontext finden kann, Eigenschaften, die definieren, welche Domäne die Client-/Web-App aufruft, was ich nicht möchte.

Zum Beispiel: Wenn eine App auf externalapp.com gehostet wird und eine Anfrage an meine API auf api.myawesomeapi.com stellt, möchte ich wissen, dass der Client auf externalapp.com gehostet wird. Aber wenn ich die Anfragedaten überprüfe, ist die einzige Information, die ich finde, Zeug, dass der Client eine Ressource auf "api.myawesomeapi.com" anfordert.

Ich erwarte, dass Anfragen von einer nativen App (Android, iOS usw.) keine Clientdomäne haben und dass Anfragen von einer Webanwendung eine Clientdomäne haben. (Client-Domäne, Host-Domäne, wie auch immer es heißen sollte).

Ich habe andere Beiträge auf Stackoverflow untersucht, und habe Empfehlungen zu verwenden: Request.Headers.Referrer. In meinem Fall sind alle Web-Apps null und die native App ist ebenfalls null. Dies scheint für mich keine Option zu sein.

+1

Sie sich bewusst, dass jede Art von Informationen über die Anforderung (wie der 'Referrer' Header) leicht sein kann (** sehr ** leicht) geschmiedet/gefälscht durch einen böswilligen Benutzer? Ich glaube nicht, dass diese Einschränkung überhaupt sicher ist, und wenn sie nicht sicher ist, ist sie auch nicht nützlich. Versuchen Sie, Ihr Design zu überprüfen, und verwenden Sie ein sicheres und getestetes Protokoll wie OAuth2, wenn Sie Ihre API wirklich sichern müssen. –

+0

Ich bin mir dessen sehr bewusst. Es ist eines meiner Hauptanliegen. Ich habe OAuth2 in Betracht gezogen, aber ich habe auf eine andere Lösung gehofft. – nullablePenguin

+0

Auch wenn die Werte in den Headern sind, können Clients lügen (und Sie sollten nie wirklich etwas, das sie senden, vertrauen). Ich denke, Sie möchten wahrscheinlich eine Art von Authentifizierung, die Sie an einen Kunden binden können. – saturdayplace

Antwort

1

können Sie verwenden:

var referrer = Request.Headers.Referrer; 
if (referrer!=null) 
{ 
    string client = referrer.GetLeftPart(UriPartial.Authority); 
} 
+0

Ist es immer genau? – Si8