我正在使用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库是一个选项,如果有任何针对我的特定用例的教程,它会很棒。
P.S。:我已经尝试过弹簧安全和相关的插件,没有欢乐。任何替代方案都会很好。
答案 0 :(得分:2)
我有同样的问题。我找到了很多grails插件,帮助你对其他oauth提供商验证你的应用程序,但没有什么可以帮助我使我的应用程序成为oauth提供程序。经过大量挖掘后,我遇到了这个grails插件,它可以完全按照您的要求进行操作。
https://github.com/adaptivecomputing/grails-spring-security-oauth2-provider
我仍在为我的应用程序配置它,我认为文档可能需要一些编辑(特别是authorization_code流程),但我得到了简单的client_credentials流程,以最少的配置工作。希望有所帮助!
答案 1 :(得分:-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参数来指定客户端凭据。
我可能误解了你的问题,你也可能想要实现服务器端。抄写员库仅支持客户端,因此您可以找到商业实现或实现自己的服务器。这是一项复杂的任务,但如果您只支持客户端凭据流,则几乎变得简单。 ; - )
答案 2 :(得分:-1)
这不是一个插件,它只是一个Grails应用程序示例,它充当OAuth提供程序。使用Grails 3非常容易上手和运行。