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

pha*_*ryx 15 ruby oauth-2.0 ruby-on-rails-3

我写了一个oauth提供程序,用于处理我公司的几个Web应用程序.我正在使用门卫宝石,到目前为止效果很好.

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

我试图模仿我在这里找到的代码,例如:

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
Run Code Online (Sandbox Code Playgroud)

但这不起作用,它仍然为用户提供客户端应用程序的授权/拒绝提示.建议?

sme*_*mek 27

OAuth具有资源所有者凭据授权流程,门卫支持该流程.基本上,您使用用户凭据(用户名和密码)请求访问令牌.这样您就可以跳过用户确认,也不需要回调URL.

要配置门卫:

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

示例令牌请求:

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
Run Code Online (Sandbox Code Playgroud)

如果您的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')
Run Code Online (Sandbox Code Playgroud)

另请参阅Doorkeepers wiki:

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


Pra*_*ddi 12

门卫0.6.7提供配置选项来执行此操作.

要配置门卫:

Doorkeeper.configure do
  skip_authorization do
    true
  end  
end
Run Code Online (Sandbox Code Playgroud)


Gre*_*sen 12

您可以通过添加为您的应用预先授权所有客户端应用

skip_authorization do
  true
 end
Run Code Online (Sandbox Code Playgroud)

通过向preauthorized门卫oauth_applications表添加一个布尔值来管理门卫初始化程序,或者基于每个应用程序.然后将这样的内容添加到初始化程序:

skip_authorization do |resource_owner, client|
  client.application.preauthorized?
 end
Run Code Online (Sandbox Code Playgroud)