Grails:使用OAuth2.0保护RESTAPI

Grails:使用OAuth2.0保护RESTAPI,grails,oauth-2.0,oauth-provider,Grails,Oauth 2.0,Oauth Provider,我正在使用Grails构建RESTAPI。我希望使用OAuth2.0客户端\u凭据流(grant\u类型)对其进行保护。我的用例如下所示: 外部代理将向以下对象发送请求: http://server-url/oauth/token?client_id=clientId&client_secret=clientSecret&grant_type=client_credentials http://server-url/resource?access_token={access-t

我正在使用Grails构建RESTAPI。我希望使用OAuth2.0客户端\u凭据流(grant\u类型)对其进行保护。我的用例如下所示:

外部代理将向以下对象发送请求:

http://server-url/oauth/token?client_id=clientId&client_secret=clientSecret&grant_type=client_credentials
http://server-url/resource?access_token={access-token obtained before}
并获取一个访问令牌。然后,我的URL(受保护的资源)应该可以访问如下内容

http://server-url/oauth/token?client_id=clientId&client_secret=clientSecret&grant_type=client_credentials
http://server-url/resource?access_token={access-token obtained before}
我正在寻找一些可以让在Grails上轻松快速地完成这项工作的东西。最好的方法/工具/插件是什么?Scribe库是一个选项,如果有任何针对我的特定用例的教程,它将非常棒


附言:我试过spring安全和相关插件,没有乐趣。根据我的经验,Scribe是为OAuth 1.0构建的,对OAuth 2.0的支持非常有限。事实上,为了测试我们自己的OAuth 2实现,我们只能使用HTTP请求包装器,我们必须手动执行其他任何操作。幸运的是,手工操作非常简单

由于我还没有找到一个很好的开放式OAuth 2.0 Java库(坦率地说,我不熟悉Groovy),我鼓励您自己编写客户机代码。您甚至不需要客户端回调端点来使用客户端凭据授予流。因此,您只需创建一个HTTP请求(如上所述,请注意转义GET参数)并获取响应内容。您的流不使用重定向,因此只需解析响应内容中的JSON对象,例如使用org.JSON库。最后,使用提取的访问令牌发送HTTP请求

请注意,您的示例并非完全符合标准。该标准要求使用HTTPS,在HTTP头而不是GET参数中发送令牌,并建议使用HTTP基本授权头而不是GET参数来指定客户端凭据


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

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


我仍在为我的应用程序配置它,我认为文档可能需要一些编辑(特别是授权\代码流),但我得到了简单的客户端\凭据流,可以在最小配置的情况下工作。希望有帮助

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


很抱歉,scribe目前只是客户端。重新标记此项。感谢您的输入。但是,我对服务器端实现感兴趣。我毫不犹豫地从头开始实现它,因为我不是OAuth安全专家,也不想留下任何安全缺陷:P.准确地说,我在寻找可以帮助我存储/管理生成的访问令牌[在到期后自动使其失效]的东西。当然,人们可以从头开始做,但可能会留下一些空白。Java提供了一个简单的接口,可以在服务器端生成、存储令牌等。Java是否也有类似的功能?我知道没有这样的库,但令牌存储是作为一个具有清晰接口的插件实现的最简单的部分(存储、加载和撤销操作就是您所需要的)。您应该更加关注实现客户端凭据授予流和存储客户端凭据的预定义权限的安全细节。该插件在文档方面确实缺乏,有点被放弃了。因此,我停止使用SpringRoo而不是Grails。Roo有一个非常好的插件,因为Roo只是vanilla Spring MVC的一个重新打包,所以您可以获得更多的官方文档。无论哪种方式,如果Grails不是一种需求,其他SpringSource系列产品(如SpringMVC或Roo)可能会更好地实现OAuth。这只是给感兴趣的人的提示。这不应该是一个答案,因此我把它留在这里的评论。