2012-06-27 74 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