2012-06-27 8 views
5

Ich baue eine REST-API mit Grails. Ich möchte, dass es mit OAuth2.0 client_credentials flow (grant_type) geschützt wird. Meine Use-Case ist wie folgt:Grails: Sichern der REST-API mit OAuth2.0

ein EDL eine access_token eine Anfrage an so etwas wie

http://server-url/oauth/token?client_id=clientId&client_secret=clientSecret&grant_type=client_credentials 

und erhalten senden. Dann meine URL (geschützte Ressource) sollte erreichbar sein, mit so etwas wie

http://server-url/resource?access_token={access-token obtained before} 

Ich suche nach etwas, das tut dies auf Grails einfach und schnell macht. Was wird der beste Weg/Tool/Plugin dafür sein? Scribe-Bibliothek ist eine Option, wenn es Tutorials für meinen speziellen Anwendungsfall gibt, wird es großartig.

P.S .: Ich habe die Feder-Sicherheit und verwandte Plugins ausprobiert, keine Freude dort. Jede Alternative wäre nett.

+0

Sorry, Schreiber ist clientseitige nur für den Moment. Wiederholen Sie dies. –

Antwort

-1

Basierend auf meinen Erfahrungen wurde Scribe für OAuth 1.0 erstellt und hat nur sehr eingeschränkte Unterstützung für OAuth 2.0. Um unsere eigene OAuth 2-Implementierung zu testen, konnten wir nur einen HTTP-Request-Wrapper verwenden, wir mussten alles andere manuell erledigen. Glücklicherweise ist es überraschend einfach, dies manuell zu tun.

Da ich immer noch keine gute offene OAuth 2.0-Bibliothek für Java gefunden habe (ehrlich gesagt, ich bin nicht vertraut mit Groovy), ermutige ich Sie, den Client-Code für sich selbst zu schreiben. Sie benötigen nicht einmal einen Client-Callback-Endpunkt, um den Client-Berechtigungsnachweis-Ablauf zu verwenden. Sie erstellen also einfach eine HTTP-Anfrage (wie Sie bereits oben beschrieben haben, achten Sie darauf, die GET-Parameter zu umgehen) und erhalten den Inhalt der Antwort. Ihr Flow verwendet keine Weiterleitungen. Analysieren Sie einfach das JSON-Objekt im Antwortinhalt, z. mit der org.json-Bibliothek. Abschließend senden Sie eine HTTP-Anforderung mit dem extrahierten Zugriffstoken.

Beachten Sie, dass Ihre Beispiele nicht vollständig standardkonform sind. Der Standard erfordert die Verwendung von HTTPS, das Senden des Tokens in einem HTTP-Header anstelle eines GET-Parameters und schlägt vor, einen HTTP-Basisauthentifizierungsheader anstelle von GET-Parametern zu verwenden, um Clientanmeldeinformationen anzugeben.

Ich habe Ihre Frage möglicherweise missverstanden, und Sie möchten vielleicht auch die Serverseite implementieren. Die Scribe-Bibliothek unterstützt nur die Client-Seite, sodass Sie eine kommerzielle Implementierung finden oder Ihren eigenen Server implementieren können. Es ist eine komplexe Aufgabe, aber wenn Sie nur den Client-Berechtigungsfluss unterstützen, wird es fast einfach. ;-)

+0

Danke für Ihre Eingaben. Aber ich bin an der serverseitigen Implementierung interessiert.Ich zögerte nicht, es von Grund auf neu zu implementieren, da ich kein OAuth-Sicherheitsexperte bin und keine Sicherheitsmängel hinterlassen möchte: P. Um genau zu sein, suchte ich nach etwas, das mir helfen könnte, die generierten Zugriffstokens zu speichern/zu verwalten [sie nach der Ablaufzeit automatisch ungültig zu machen] usw. Natürlich kann man es von Grund auf machen, aber es kann Lücken hinterlassen. Gibt es so etwas für Java, das eine einfache Schnittstelle zum Generieren, Speichern von Token usw. auf der Serverseite bietet? – SoftDev

+0

Ich kenne keine solche Bibliothek, aber Token-Speicher ist der einfachste Teil, der als Plugin mit einer übersichtlichen Schnittstelle implementiert werden kann (ein Laden, Laden und Widerrufen ist alles, was Sie brauchen). Sie sollten sich mehr mit Sicherheitsdetails befassen, die den Clientberechtigungsberechtigungsfluss implementieren und vordefinierte Rechte für Clientanmeldeinformationen speichern. –

2

Ich habe das gleiche Problem. Ich habe eine Menge Grails-Plugins gefunden, die dir geholfen haben, deine App gegen andere OAuth-Provider zu authentifizieren, aber nichts, was mir helfen würde, meine App zum OAuth-Provider zu machen. Nach vielen Grabungen stieß ich auf dieses Grails-Plugin, das genau das macht, was Sie wollen.

https://github.com/adaptivecomputing/grails-spring-security-oauth2-provider

Ich Konfiguration noch es für meine Anwendung, und ich denke, die docs einige Änderungen benötigen könnte (insbesondere die authorization_code Flow), aber ich habe die einfachen client_credentials mit minimaler Konfiguration arbeiten fließen. Ich hoffe, das hilft!

+0

Dieses Plugin fehlt wirklich in Bezug auf die Dokumentation und ist irgendwie aufgegeben. Ich beendete deshalb Spring Roo anstelle von Grails. Es gibt ein sehr schönes Plugin für Roo, und da Roo nur ein Paket von Vanilla Spring MVC ist, bekommt man viel mehr offizielle Dokumentation. In beiden Fällen, wenn Grails nicht erforderlich ist, können andere Produkte der SpringSource-Familie (wie Spring MVC oder Roo) OAuth-Implementierungen besser unterstützen. Dies ist nur ein Tipp für alle Interessierten. Es soll keine Antwort sein und deshalb habe ich es hier in den Kommentaren hinterlassen. – petersaints