Viele Beispiele zu RESTful-Webdiensten berücksichtigen nicht das Problem, dass viele Anwendungen heute Multi-User sind.Was ist die richtige Methode zum Autorisieren und Strukturieren eines RESTful-Backends?
Stellen Sie sich ein Multi-User Backend vor, das eine RESTful API aussetzt. Die Back-End-Datenarchitektur verwendet eine gemeinsam genutzte Datenbank und ein gemeinsames Schema. Jeder Tisch wird einen Verweis auf ein tenant_id
enthalten:
+-------------+----+-----------------+
| tenant_name| id | shared_secret |
+-------------+----+-----------------+
| bob | 1 | 2737sm45sx543 |
+-------------+----+-----------------+
| alice | 2 | 2190sl39sa8da |
+-------------+----+-----------------+
+-------------+----+-------+-----------+
| pet_name | id | type | tenant_id |
+-------------+----+-------+-----------+
| fuffy | 1 | dog | 1 |
+-------------+----+-------+-----------+
| kerry | 2 | cat | 2 |
+-------------+----+-------+-----------+
Frage 1: mit drei oder mehr Client-Anwendungen (zB Android, iOS und Web App) mit dem RESTful-Backend der Interaktion, wie würden Sie die Authentifizierung durchführen gegen das Backend?
RESTful backend, API, HTTP-Verbs, shared database and schema
|
|
+---- Web Application (Client 1)
| |
| + Alice
| |
| + Bob
|
+---- Android Application (Client 2)
| |
| + Alice
| |
| + Bob
|
+---- iOS Application (Client 3)
| |
| + Alice
| |
| + Bob
|
Jeder Client sollte Alice und Bob erlauben, ihre Haustiere zu verwalten. Jeder Client ist eine GUI und wird das Backend verwenden (intern, um HTTP-Anfragen zu stellen). Frage: Wie kann sich jeder Kunde gegen das Backend authentifizieren?
Angenommen, HMAC (es ist perfekt RESTful, keine Sitzungen): Diese Methode beinhaltet Signieren der Nutzlast mit einem gemeinsamen Geheimnis (nie über die Leitung gesendet). Sollte jeder Kunde eine eigene Kopie der Tabelle tenant
haben (die das Feld shared_secret
enthält)?
Android App -> Client Sign -> Signed Request -> Backend -> Result
Web App -> Client Sign -> Signed Request -> Backend -> Result
Frage 2: Was sollte den Blick der Ressource-URI wie?
Hier sind zwei Möglichkeiten für die Möglichkeiten, Bob Haustiere zu bekommen:
Möglichkeit # 1: Die Authorization
Header geben Ihnen den Mieter (unique) Namen:
GET /pets HTTP/1.1
Host: www.example.org
Authorization: bob:c29kYW9kYSBhb2lzYWRoIGYgZDUzNDUz
Möglichkeit # 2.
GET /pets/tenant_id=1 HTTP/1.1
Host: www.example.org
Authorization: bob:c29kYW9kYSBhb2lzYWRoIGYgZDUzNDUz
Seien Sie vorsichtig bei der Verwendung des Ausdrucks Multi-Tenant. Ich bin nicht überzeugt, dass es bedeutet, was Sie denken, dass es tut. Sehen Sie Details hier http://msdn.microsoft.com/en-us/library/aa479086.aspx –
@Gaz_Edge bedeutet es virtuelle Partition Daten zwischen den Clients und eine einzige Instanz wird mehr Kunden dienen, das ist, was ich tue. Sind Sie einverstanden? – gremo
Ich denke, dass Sie dies zu kompliziert machen. Sie haben 1 Web Service, n Web Service Clients und x Benutzer ja? –