Grails:使用OAuth2.0保护REST API

Sof*_*Dev 5 grails oauth-provider oauth-2.0

我正在使用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
Run Code Online (Sandbox Code Playgroud)

并获得access_token.然后,我的URL(受保护的资源)应该可以访问类似的东西

http://server-url/resource?access_token={access-token obtained before}
Run Code Online (Sandbox Code Playgroud)

我正在寻找能够轻松快速地在Grails上执行此操作的内容.什么是最好的方式/工具/插件用于此?Scribe库是一个选项,如果有任何针对我的特定用例的教程,它会很棒.

PS:我已经尝试过弹簧安全和相关插件,没有欢乐.任何替代方案都会很好.

Zól*_*ván -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 库仅支持客户端,因此您可以找到商业实现或实现您自己的服务器。这是一项复杂的任务,但如果您仅支持客户端凭据流程,那么它几乎变得很容易。;-)