从客户端应用程序使用Doorkeeper进行身份验证而不传输秘密

时间:2013-10-25 19:15:50

标签: javascript ruby-on-rails oauth google-oauth doorkeeper

我正在尝试在Ruby on Rails API应用程序中使用Doorkeeper进行身份验证。从客户端AngularJS应用程序,我想获得一个访问令牌。目前,这涉及到/ oauth / authorize的GET请求,它给了我一个代码,然后我将该代码与client_id以及/ oauth / token的秘密一起发布。我不想从客户端应用程序发送客户端ID和密码,因为它们以纯文本形式存储在JavaScript文件中。我想关注this flow,其中response_typetoken,而不是code,但我无法弄清楚如何使用门卫这样做。 Their wiki示例似乎都涉及将客户端ID和密钥POST到/ oauth / token。

门卫是否是正确的宝石?如何从客户端应用程序执行Google OAuth2,其中没有秘密从客户端传递到服务器?

编辑:看起来像我想要的是Implicit Grant,Doorkeeper supports。现在我只需要在我的Rails应用程序中找到如何做到这一点......

1 个答案:

答案 0 :(得分:5)

无需额外的服务器端配置。

当我在我的Rails应用程序中创建一个新的Doorkeeper::Application时,门卫界面为我提供了一个授权链接,其中包含response_type=code该应用程序。

我将其更改为response_type=token,当我向其发出GET请求时,它会立即使用access_token代替code进行回复。授权网址看起来像http://my-rails-doorkeeper-app/oauth/authorize?client_id=1234&redirect_uri=http://my-angularjs-app&response_type=token

更新:

仅当我们还允许对授权流进行隐式授权时,才能应用此选项。 默认情况下,门卫将允许其四种流程(隐式授权,授权授权,密码和client_credentials)。

如果您不想让它发生,您可以在initializer/doorkeeper.rb中对其进行配置,因为有时可能会有危险。