2012-06-27 106 views
5

我正在使用Grails構建REST API。我希望使用OAuth2.0 client_credentials流(grant_type)來保護它。我的使用情況如下:Grails:使用OAuth2.0保護REST API

一個外部代理將請求發送到像

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

和獲得的access_token。然後,我的網址(受保護的資源)應該是入店的東西,如

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

我期待的東西,使上Grails的方便,快捷這樣做。什麼將是最好的方式/工具/插件用於此?抄寫庫是一個選項,如果有針對我的特定用例的任何教程,它將會很棒。

P.S:我已經嘗試了彈簧安全及相關插件,沒有喜悅那裏。任何替代品都會很好。

+0

對不起運行,隸是客戶端只在瞬間。重新標記這個。 –

回答

-1

根據我的經驗,抄寫員是專爲OAuth的1.0和只具有的OAuth 2.0的支持非常有限。實際上,爲了測試我們自己的OAuth 2實現,我們可以使用的所有內容都是HTTP請求封裝,我們不得不手動執行其他任何操作。幸運的是,手動操作非常容易。

因爲我還沒有找到一個Java的罰款開放的OAuth 2.0庫(坦率地說我不熟悉使用Groovy),我鼓勵你寫客戶端代碼自己。您甚至不需要客戶端回調端點來使用客戶端憑據授權流程。因此,您只需創建一個HTTP請求(正如您已經在上面寫過的那樣,請注意轉義GET參數)並獲取響應內容。您的流程不使用重定向,因此只需在響應內容中解析JSON對象,例如與org.json庫。最後,使用提取的訪問令牌發送HTTP請求。

請注意,您的示例不完全符合標準。該標準要求使用HTTPS,將標記發送到HTTP標頭而不是GET參數,並建議使用HTTP基本授權標頭而不是GET參數來指定客戶端憑證。

我可能誤解了你的問題,你可能要實現服務器端也。抄寫庫只支持客戶端,所以你可以找到一個商業實現或實現你自己的服務器。這是一項複雜的任務,但如果您僅支持客戶端憑證流,則幾乎變得非常容易。 ;-)

+0

感謝您的輸入。但是,我對服務器端實現感興趣。由於我不是OAuth安全專家,並且不想留下任何安全漏洞,所以我毫不猶豫地從頭開始實施它。確切地說,我一直在尋找可以幫助我存儲/管理生成的訪問令牌的東西[在失效時間後自動失效]等。當然,可以從頭開始,但可能會留下一些空白。 Java中是否存在類似的東西,它提供了一個簡單的界面來在服務器端生成,存儲令牌等? – SoftDev

+0

我不知道這樣的庫,但令牌存儲是實現爲具有清晰接口的插件(存儲,加載和撤銷操作都是您需要的)中最容易的部分。您應該更關心實施客戶端憑據授權流程的安全細節,並存儲客戶端憑證的預定義權限。 –

2

我有同樣的問題。我發現了很多grails插件,可以幫助您針對其他oauth提供商驗證您的應用程序,但沒有什麼能夠幫助我將應用程序變成oauth提供程序。經過大量的挖掘之後,我遇到了這個grails插件,它將完全按照您的要求進行。

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

我仍然可以配置爲我的申請,我認爲該文檔可能需要幾個編輯(特別是authorization_code流),但我得到了簡單的client_credentials流量與最小配置工作。希望有所幫助!

+0

這個插件在文檔方面真的很缺乏,有點被遺棄。因此,我結束了使用Spring Roo而不是Grails。 Roo有一個非常漂亮的插件,因爲Roo只是一個香草Spring MVC的重新包裝,所以你可以獲得更多的官方文檔。無論哪種方式,如果不需要Grails,其他SpringSource系列產品(例如Spring MVC或Roo)可能在OAuth實現方面做得更好。這只是一個有興趣的人的提示。這不應該是一個答案,因此我將它留在評論中。 – petersaints