5

我正在使用 Grails 构建一个 REST API。我希望使用 OAuth2.0 client_credentials flow(grant_type) 对其进行保护。我的用例如下:

外部代理将向类似的东西发送请求

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

并获得一个access_token。然后,我的 URL(受保护的资源)应该可以通过类似的方式访问

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

我正在寻找可以在 Grails 上轻松快速地执行此操作的方法。为此使用的最佳方式/工具/插件是什么?Scribe 库是一个选项,如果我的特定用例有任何教程,那就太好了。

PS:我已经尝试过 spring-security 和相关插件,那里没有乐趣。任何替代方案都会很好。

4

3 回答 3

2

我有同样的问题。我发现很多 grails 插件可以帮助您针对其他 oauth 提供者验证您的应用程序,但没有任何东西可以帮助我使我的应用程序成为 oauth 提供者。经过大量挖掘,我发现了这个 grails 插件,它可以完全满足您的需求。

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

我仍在为我的应用程序配置它,我认为文档可能需要进行一些编辑(特别是 authentication_code 流程),但我得到了简单的 client_credentials 流程以使用最少的配置。希望有帮助!

于 2012-07-19T18:45:16.827 回答
-1

根据我的经验,Scribe 是为 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 参数来指定客户端凭据。

我可能误解了你的问题,你可能也想实现服务器端。scribe 库仅支持客户端,因此您可以找到商业实现或实现自己的服务器。这是一项复杂的任务,但如果您只支持客户端凭据流,它几乎变得容易。;-)

于 2012-06-27T14:56:31.963 回答
-1

这不是一个插件,它只是一个充当 OAuth 提供者的示例 Grails 应用程序。使用 Grails 3 启动和运行起来真的很容易。

https://github.com/bobbywarner/grails3-oauth2-api

于 2016-06-27T16:27:39.313 回答