我正在尝试在 Ruby on Rails API 应用程序中使用 Doorkeeper 进行身份验证。我想从客户端 AngularJS 应用程序获取访问 token 。目前,这涉及到/oauth/authorize 的 GET 请求,它会给我一个代码,然后我将该代码连同 client_id 和一个密码一起发布到/oauth/token。我不想从我的客户端应用程序发送客户端 ID 和密码,因为它们以纯文本形式存储在 JavaScript 文件中。我想关注this flow其中 response_type
是 token
,而不是 code
,但我不知道如何用 Doorkeeper 做到这一点。 Their wiki所有示例似乎都涉及将客户端 ID 和密码发布到/oauth/token。
Doorkeeper 是否适合这个?我如何从客户端应用程序执行 Google OAuth2,其中没有 secret 从客户端传递到服务器?
编辑: 看起来我想要的是隐式授权,Doorkeeper supports .现在我只需要找出如何在我的 Rails 应用程序中执行此操作...
最佳答案
无需额外的服务器端配置。
当我在我的 Rails 应用程序中创建一个新的 Doorkeeper::Application
时,Doorkeeper 界面为我提供了一个授权链接,其中包含该应用程序的 response_type=code
。
我将其更改为 response_type=token
,当我对其发出 GET 请求时,它会立即使用 access_token
而不是 code
进行响应。授权 URL 类似于 http://my-rails-doorkeeper-app/oauth/authorize?client_id=1234&redirect_uri=http://my-angularjs-app&response_type=token
。
更新:
这仅适用于我们还允许对授权流进行隐式授权的情况。 默认情况下,doorkeeper 将允许其四种流(隐式授予、授权授予、密码和 client_credentials)。
如果您不想让它发生,您可以在 initializer/doorkeeper.rb
中配置它,因为有时它可能很危险。
关于javascript - 使用来自客户端应用程序的 Doorkeeper 进行身份验证而不传输 secret ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19597746/