Web-API-Authentifizierung und Autorisierung (OAuth)

8

Betrachten Sie das folgende (allgemeine) Szenario. Ich werde zuerst versuchen zu spezifizieren, wie ich verstehe, wie eine (nette) Web-API mit OAuth aussehen sollte. Bitte korrigieren Sie mich, wenn einer der Flüsse falsch ist.

Meine API : Im Mittelpunkt der Aufmerksamkeit stehen alle Kunden.

Meine Webanwendung : Verwendet die API wie jeder andere Client auch.

Meine mobile App : Verwendet auch die API, genau so wie die Web-App. Benutzer sollten sich authentifizieren können, ohne einen Browser zu öffnen.

3rd Party Web App : Verwendet auch die API - der Benutzer / Ressourcenbesitzer muss jedoch der App die Berechtigung erteilen, etwas zu tun. Sie tun dies, indem sie auf meine Website umleiten (oder ein Popup öffnen), den Benutzer bei Bedarf anmelden und den Benutzer zur Eingabe auffordern.

Mobile App von Drittanbietern : Gleiche Anforderungen wie die Web-App von Drittanbietern.

Die Frage (n)

  • Soll die API Authentifizierung und Autorisierung übernehmen?
  • Wie weiß die API, wer (der Ressourcenbesitzer, der die Clientanwendung verwendet) die API verwendet?
  • Wenn ein Benutzer meine offiziellen Clients verwendet, sollten diese natürlich keine Berechtigungen gewähren müssen - meine Clients sollten alle Berechtigungen haben. Wie würde ich beim Aufruf der API zwischen meinen offiziellen und Drittkunden unterscheiden?

Hier ist was ich verstehe, und würde so weit machen. Hier brauche ich wirklich Hilfe - dies richtig machen zu können.

Offizielle Web-App

%Vor%
  • Da die Web-App nur ein Verbraucher meiner API ist, wie würde ich den angemeldeten Zustand verwalten? Sollte die Web-App das tun?
  • Soll die Webanwendung direkten Zugriff auf die Benutzerdatenbank haben, anstatt die Anmeldeinformationen anhand der API zu überprüfen?

Ich benutze hauptsächlich .NET (C #), aber ich würde einen Ansatz lieben, der auch für, sagen wir, Node JS-basierte APIs anwendbar ist.

Wie würdest du das machen? Besonders die Kundenströme sind ein Problem für mich. Der Grund, warum ich frage, ist, dass ich gelesen habe, dass Sie Ihre eigene Sicherheitslösung nicht rollen sollten, es sei denn, dies ist absolut notwendig. Wenn es dafür irgendwelche Standard-Richtlinien gibt, lassen Sie es mich wissen. :)

    
Jeff 21.10.2013, 17:07
quelle

2 Antworten

3

Werfen Sie einen Blick auf die neuen Web API 2 oAuth Sachen.

Starten Sie grundsätzlich ein neues Web-API-Projekt und stellen Sie sicher, dass Sie die Authentifizierung ändern.

Dann ist es ein einfacher Fall, den Register-Controller aufzurufen. Dies erstellt dann ein Token für Sie, das dann im Header jeder Anfrage für diesen Benutzer gesendet werden kann.

Sehen Sie sich die API-Aufrufe mit fiddler an und erstellen Sie einige Mock-up-Accounts.

    
CSharpNewBee 14.01.2014 17:22
quelle
0

Es ist eine Weile her, aber ich dachte, ich würde dokumentieren, was ich getan habe.

Ich verwende DotNetOpenAuth. Ich habe eine Datenbank mit Clients, und sie haben ein Trusted -Feld - wenn das gesetzt ist, kann der Client die Passwortvergabe verwenden, die automatisch alle Bereiche zuweist, die für diesen Client vordefiniert sind.

Die Webanwendung der 1st-Party verwendet Plain-Cookieauth - die Angabe der Client-Credentials in JS wäre zu riskant.

    
Jeff 19.08.2015 07:47
quelle