ruby - 如何在使用门卫的 oauth 提供商上为我的用户预授权客户端应用程序?

标签 ruby ruby-on-rails-3 oauth-2.0

我编写了一个 oauth 提供程序,旨在与我公司的几个 Web 应用程序一起使用。我正在使用 doorkeeper gem,到目前为止效果很好。

典型的行为是用户转到客户端应用程序,被重定向到提供商以登录,确认客户端应用程序有权访问该用户的信息,然后被重定向回客户端应用程序。但是,我想跳过用户确认客户端应用程序的步骤。我想为他们做,所以没有提示。

我试图模仿代码 I found here像这样:

Doorkeeper::Application.all.each do |application|
  auth_params = {response_type: 'code', client_id: application.uid, redirect_uri: application.redirect_uri}
  client = Doorkeeper::OAuth::Client.find(application.uid)
  authorization = Doorkeeper::OAuth::AuthorizationRequest.new(client, user, auth_params)
  authorization.authorize
end

但这没有用,它仍然向用户提供客户端应用程序的授权/拒绝提示。有什么建议吗?

最佳答案

OAuth 有 Resource Owner Credentials Grant Doorkeeper 支持的流程。基本上,您使用用户凭据(用户名和密码)请求访问 token 。这样您就可以跳过用户确认,也不需要回调 URL。

配置门卫:

Doorkeeper.configure do
  resource_owner_from_credentials do |routes|
    User.authenticate!(params[:username], params[:password]) # change this if needed
  end
end

示例 token 请求:

curl -i https://example.com/oauth/token \
     -F grant_type=password \
     -F client_id=<client_id> \
     -F client_secret=<client_secret> \
     -F username=user@example.com \
     -F password=password

如果您的 OAuth 客户端应用程序是 Rails 应用程序,您可以使用 oauth2为此的 gem :

client = OAuth2::Client.new('client_id', 'client_secret', :site => "https://example.com")
access_token = client.password.get_token('user@example.com', 'password')

另见 Doorkeepers wiki:

https://github.com/applicake/doorkeeper/wiki/Using-Resource-Owner-Password-Credentials-flow

关于ruby - 如何在使用门卫的 oauth 提供商上为我的用户预授权客户端应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11129676/

相关文章:

ruby-on-rails - 匿名 block 转发 (&block) 在 Ruby 中如何工作?

ruby-on-rails - 使用 Devise 登录后没有任何反应

ruby-on-rails - 为什么默认情况下我的 Rails 应用程序的 .gitignore 文件中包含 config/database.yml?

python - authlib OAuth 客户端与 Flask 应用程序一起使用的更好示例?

javascript - 无需 secret 即可获取 github OAuth token

oauth-2.0 - 谷歌 OAuth "error": "invalid_grant" response to request to exchange one time auth code for refresh and access token

ruby - object#initialize 重载时与 Ruby 中的 IRB 输出混淆

ruby - MongoDB 和 MongoRuby : Sorting on mapreduce

jquery - 如何使用 jQuery 检查 Rails.cache 键是否存在

ruby - 继承改变方法类