GitHub OAuth授权请求不会重定向到“授权应用程序”页面

时间:2014-04-17 21:00:50

标签: ruby redirect oauth github-api faraday

我已经使用Ruby中的Faraday实现了我自己的类,用于通过OAuth处理授权到GitHub。我已在以下条件下验证:

  • 未登录GitHub
  • 该应用没有令牌

通过GET"/login/oauth/authorize"申请授权并使用随机state变量:

  • 重定向到GitHub登录页面
  • 登录后重定向到授权应用程序页面
  • 授权后,使用临时代码执行我的应用程序回调
  • 使用临时代码<{1}}到POST时使用access_token回复

我遇到的问题是当我改变第一个条件时,我还没有登录到GitHub。相同的GET请求被发送到GitHub,我看到正确的URL和正确的参数。然后我看到GitHub带有"/login/oauth/access_token"参数的正确重定向,但它很快就会重新定向到GitHub主页。

我希望忘记标题参数或其他东西很简单,有人可能会立即发现问题。无论如何,任何帮助表示赞赏...

设置法拉第连接的代码:

return_to

发送授权请求的代码:

def connection
  @connection ||= Faraday.new(url: 'https://github.com') do |faraday|
    faraday.request  :url_encoded
    faraday.response :logger
    faraday.adapter  Faraday.default_adapter
  end
end

我没有显示代码,但我的控制器重定向到def request_authorization(client_id, redirect_uri, redirect_id, scope, expected_state) response = connection.get '/login/oauth/authorize', { client_id: client_id, redirect_uri: "#{redirect_uri}?id=#{redirect_id}", scope: scope, state: expected_state } if response.status == 302 response.headers[:location] else nil end end 的网址回复。同样,我确实在两种情况下都看到了来自我的控制器的重定向,但第二种情况似乎遇到了GitHub在重定向请求中不喜欢的东西。我假设它然后重定向到主页,并且从不回复我的应用程序,因为我的原始请求中存在这个未知问题。

谢谢, 大卫

1 个答案:

答案 0 :(得分:1)

来自GitHub的Ivan在寻找我的问题的答案方面提供了很大的帮助。我假设问题是使用法拉第或OAuth的一些细节,但事实证明问题是一个被证明是错误的基本假设。希望这会帮助其他遇到类似误解的人。

我曾假设我的应用程序的用户想要连接到GitHub(或其他OAuth服务)会发出像&#34; connect&#34;请求我的应用程序。然后,我的应用程序会向GitHub生成OAuth授权请求,处理任何重定向,并最终将授权应用程序页面呈现给用户以供接受。

原来我只需要制作&#34; connect&#34;请求实际上是一个直接向GitHub发出授权请求的链接。我的应用程序只需要担心处理它已经做过的回调。现在更容易并适用于所有情况。

由于这是一个简单的案例,原因是没有登录的错误方法。登录时失败,因为我没有处理通常浏览器提供的会话状态。

更仔细地阅读OAuth RFC,清除了我对用户代理和客户端的请求和响应处理位置的困惑。