2013-05-12 11 views
6

Auf einem REST-basierten System, was sind die Optionen zum "Verschlüsseln" Ressourcen-ID.REST Security Design bewährte Methode beim Aussetzen von Ressourcen ID

Zum Beispiel:

/client/2 

würde bei

/client/SOMEHASHKEY 

zugänglich sein Ich denke:

1 - Haben DB-Tabellen, die Spur einer Ressourcen-ID hält und es entsprechende HASH und schau es dir bei jeder Anfrage an. Dies scheint offensichtlich ziemlich schwer zu implementieren, und Server-Arbeit ein wenig zu erhöhen.

2 - eine Art interne Verschlüsselungs- Algorithmus haben, die einen Hash zum Beispiel auf der Grundlage der Ressourcen Erstellungsdatum, die Ressourcen-ID und base64 es (natürlich nicht optimal, aber Sie erhalten den Punkt)

So gibt es schaffen würde gute Praktiken für diese Art von Szenarien? Was würden Sie empfehlen ?

Vielen Dank

Antwort

2

Wenn Ihre Absicht ist es schwer zu erraten, Client-IDs zu machen, dann uuids verwenden, zum Beispiel 32 Hex-Zeichen lang guids wie 21EC2020-3AEA-1069-A2DD-08002B30309D.

Das Identifizieren von Entitäten in einer Domäne hängt vollständig von der Implementierung ab, die den REST-Dienst bereitstellt.

Einige Anwendungen verwenden standardmäßig Guides, um Entitäten zu identifizieren. Ein gutes Beispiel hierfür ist zum Beispiel der lovefilm API:

GET /users/9D48675C-096F-11DC-BF5A-88D01745CE5C HTTP/1.1 
Host: openapi.lovefilm.com 

Allerdings ist schwer zu erratende Identifikatoren Sie nicht vor unbefugtem Zugriff schützen und ist kein Ersatz für einen echten Authentifizierungsmechanismus.

+0

Brummen also, wenn ich Ihre Antwort nehme und versuche, es auf meine Frage anzuwenden, meinen Sie, Tabelle zu verwenden, um cespondance zwischen Hash, GUID oder was auch immer und der tatsächlichen Ressource zu verfolgen? – silkAdmin

+0

Es hängt davon ab, wie Ihre Anwendung die Ressource speichert. Ich habe keine Ahnung, wie die Ressource in der Anwendung aussieht. Aber ja, wenn Sie sich intern an Integer-IDs halten müssen, fügen Sie Ihrem Clientmodell eine weitere GUID-Eigenschaft hinzu. Wenn Ihr Speicher eine SQL DB-Tabelle ist, speichern Sie die GUID in einem zusätzlichen Feld der Client-Tabelle. – stmllr

+0

damit wir zurück zur Frage der "guten Praxis" kommen, denke ich, dass Ihr Punkt ist, dass ich eine UUID auf der Ressourcen-Tabelle selbst indizieren sollte? – silkAdmin