我已经写了一个oauth提供程序,旨在与我公司的几个Web应用程序一起工作.我正在使用doorkeeper宝石,迄今为止工作良好.
典型的行为是让用户去客户端应用程序,重定向到提供商登录,确认客户端应用程序被授权访问该用户的信息,并重定向到客户端应用程序.但是,我想跳过用户确认客户端应用程序的步骤.我想为他们做,所以没有提示.
我试图用类似于
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支持.基本上,您使用用户凭据(用户名和密码)请求访问令牌.这样,您可以跳过用户确认,也不需要回调URL.
配置Doorkeeper:
Doorkeeper.configure do resource_owner_from_credentials do |routes| User.authenticate!(params[:username],params[:password]) # change this if needed end end
示例令牌请求:
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宝石:
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