2012-05-16 7 views
6

Ich habe eine API, die ich über REST aussetze, und ich überlege, wo die Behörden Einschränkungen zu platzieren.
Ich habe gelesen, dass es eine Best Practice zum Sichern der Service-Schicht gibt, da es derjenige ist, der die Arbeit erledigt und Sie nicht wissen, wo es aufgerufen wird, aber ich bin mir nicht sicher, was die beste Vorgehensweise ist die WS-Schicht.
Ein Gedanke, den ich habe, ist, dass ich ein sehr feinkörniges Autorisierungsmodell auf der Serviceebene und ein sehr grobkörniges Autorisierungsmodell auf der WS-Ebene haben muss, um einerseits das DRY-Prinzip auf ein Minimum zu reduzieren, aber andererseits Vorstellung der Verteidigung in der Tiefe.Spring-Sicherheit, die die Service-Schicht, die Web-Service-Schicht oder beides sichert?

Beispiel:

Für die Users Ressource gibt es eine UserWS und ein UserService. Administratoren können Benutzer erstellen/aktualisieren/löschen und Benutzer können über andere Benutzer lesen.
Angenommen die UserWS ist an %root%/users gebunden definiere ich eine intercept-url für diese URL mit der ROLE_USER Berechtigung, die nur sagt, dass Sie ein Benutzer sein müssen, um dorthin zu gelangen, aber die Service-Schicht selbst wird die spezifischen Behörden für die relevanten Methoden angeben.

Weitere Optionen sind:

  • Ort die gleichen Zulassungsanforderungen sowohl auf den Service und die WS-
    Pro- Sie werden so früh wie möglich Eindringlinge herauszufiltern (und zum Beispiel speichern die Umwandlung von Parametern, wenn Sie Spring MVC)
    Con- Vervielfältigung von Konfiguration verwenden ist ein Problem Wartung und ist anfällig für Fehler => Sicherheitsproblem

  • Platz der authorizati nur auf dem WS-
    Pro- so schnell wie möglich auswählen, wenn der WS auf Anforderungen comming
    Con- Die Dienstschicht aus unterschiedlichen Kontexten verwendet werden könnte

  • Platte der Zulassungsanforderungen nur auf den service-
    pro- Keine Vervielfältigung
    Con- Overhead erlaubt „unverblümt“ unfähige Anfrage an die Dienstschicht ankommt

Wäre wirklich ein Feedback über die Möglichkeiten schätzen

Antwort

5

Ittai, Die Verwendung des gleichen Sicherheitsmechanismus auf der WS- und der Service-Schicht wird als wiederholend betrachtet - und erfordert Wartung auf diesen beiden Ebenen. Keine Sicherheit auf der WS-Ebene zu haben ist eine schlechte Sache - da Sie tatsächlich jemanden in Ihr System eindringen lassen (auch wenn Sie sie später blockieren werden - sehen viele das als eine schlechte Sache an). Kurz gesagt, denke ich, dass du diese beiden Dinge durcheinander bringen solltest - benutze einen sehr groben Mechanismus auf der WS-Ebene und einen sehr starken auf der Service-Ebene. So wiederholst du dich nicht und musst den Code nicht an beiden Stellen pflegen (da es nicht die gleiche Sicherheitsstufe ist); und Sie werden in der Lage sein, untermaßige Benutzer so schnell wie möglich herauszufiltern, aber immer noch eine sehr hohe Sicherheitsstufe haben, wo sie platziert werden sollte.

0

Ich würde sagen, wenn Sie Zeit haben, nur Service-Schicht, wenn nicht.

Es ist immer gut, Präsentation und Dienste zu sichern, denn wenn Sie Ihre Dienste jemals mit etwas anderem als der Präsentation in Verbindung bringen (Sie setzen zum Beispiel einen Web-Service frei), haben Sie Ihre Sicherheit an Ort und Stelle.

Auch wenn jemand einen Weg findet, Ihre Präsentationsebene zu umgehen (sagen Sie, dass Tiers und Ihre Dienste auf einem Remote-Computer laufen), haben Sie immer noch Ihre Sicherheit.

+0

danke für Ihre Antwort, Aber wie ich schon sagte, wenn ich nur die gleichen Befugnisse auf beiden haben, dann ist es doppelte und anfällig für Fehler (daher Sicherheit Haftung). Angenommen, ich notiere die Service-Schicht, was sollte ich auf die WS legen und warum? Danke – Ittai

+0

IMHO müssen Sie nur einen einzelnen Dienst haben, der die Logik hat und einen UI-Vertreter für diesen Service und einen WS Delegierten hat. Auf diese Weise müssen Sie nur den konkreten Service kommentieren. Im Allgemeinen müssen Sie, wenn Sie keine Duplikate haben wollen, die Komponente sichern, die die eigentliche Logik enthält. – Simeon

Verwandte Themen