我的应用程序中有一个自定义OAuth2策略,我正在使用Omniauth来授权来自多个站点的用户。 (这些站点都是同一应用程序的不同安装,也在内部维护,因此我可以访问授权的双方。)
我们不是为每个站点设置新策略,而是使用Omniauth周期的请求阶段来更新策略,例如:请求时新的client_secret
和client_options
。我们可以使用请求中的参数区分站点,这在我们将用户引用到远程登录页面时起作用。
但是,令牌请求步骤似乎崩溃了。当我在本地运行开发时,我的应用程序在端口3000上,IDP在端口9000上,一切正常。在登台服务器上,我得到了很多
Faraday :: Error :: ConnectionFailed:连接被拒绝 - 连接(2)
我更新了omniauth-oauth2
gem以获取最近的更改来捕获这些错误,现在我得到了
无法通过[策略]对您进行身份验证,因为“无法连接”。
...这意味着同样的错误会被捕获并以不同的方式输出。
堆栈跟踪告诉我,这是在令牌请求中发生的。 “连接失败”让我觉得这是请求中配置错误的URL。这个 在本地工作(显然)。如何调试升级并弄清楚出了什么问题?我觉得我甚至无法弄清楚我应该寻找什么,以及在哪里。
ETA:观察双方的应用程序日志,我可以看到IDP应用程序从未收到令牌的请求;它重定向回客户端应用程序中的回调,然后没有看到任何更多。客户端应用程序包含这些无用的日志:
Started GET "/users/auth/[strategy]/callback?code=[code here]&response_type=code&state=[state here]" for [IP Address] at 2013-12-20 20:55:46 +0000
Processing by Users::OmniauthCallbacksController#failure as HTML
...而在localhost上,这是有效的,相应的日志如下所示:
Started GET "/users/auth/[strategy]/callback?code=[code here]&response_type=code&state=[state here]" for 127.0.0.1 at 2013-12-20 11:27:46 -0500
Processing by Users::OmniauthCallbacksController#[strategy] as HTML
因此在回调中发生了一些事情,导致进入失败行动。 IDP永远不会看到令牌请求的事实使我想到某种方式请求被错误地构建;如何在发送之前找到并查看它?
更新:正如您从评论中看到的那样,我99%肯定这不是SSL certificates problem。我应该在生产网站上添加它,OAuth工作正常;分段和生产之间的区别是上面提到的变化(第二段),以处理具有相同策略的多个站点。