我已经看到有关此问题的其他问题(here,here和here),但我对任何解决方案都不满意,所以我再问一遍。我正在启动一个Web应用程序,它将利用来自多个提供商(Google,Facebook,Twitter,Yahoo)的OAuth进行身份验证。我正在努力寻找适合用于本地开发环境和生产环境的配置。
我发现的主要解决方案是在每个提供商中注册多个应用,为每个提供商接收不同的消费者密钥和秘密:
“我的应用制作” - 带有http://www.myapp.com/callback的回调URI
“我的应用开发” - 带有http://local.myapp.com/callback的回调URI
在本地主机文件中添加一个条目,将local.myapp.com
指向127.0.0.1
,并为您的应用程序配置一些根据环境使用正确的使用者密钥的配置,您很高兴,对吧?
但是我的应用程序是responsive,我需要测试我的PC上运行的开发环境,这些设备来自多个其他设备,比如我的iPhone和iPad,它们都无法解析开发回调URI。
假设我的网络上已经有一个DNS服务器,并且能够在那里添加local.myapp.com
的条目而不是我的本地主机文件,现在可以从网络上的任何设备访问我的开发实例。
但是我的开发团队都在同一个本地网络上运行。现在local.myapp.com
为每个人指向相同的IP。让我们回到在每个开发人员的计算机上设置hosts文件,这样他们就可以独立于工作站内工作。现在没有人可以再次从他们的iPhone测试他们的开发实例。对于每个开发人员而言,向提供者注册应用程序似乎不是正确的答案,因此他们可以指定唯一的回调URI。
通常情况下,当我在杂草中找到一个看似简单的问题的复杂解决方案时,通常意味着我做了一些根本错误的事情。我错过了关于OAuth的一些内容,是不是打算像这样使用?我很想完全废弃OAuth,只需要使用OpenID(不需要注册应用程序注册,并且可以在应用程序中指定回调URI),但后来我失去了Facebook和Twitter中的两个重要人物。我真的不需要任何用户的数据,如果它可用,那就太好了。有人能让我回到OAuth吗?
答案 0 :(得分:0)
我发布了关于我写的rails应用程序的以下答案:
OAuth2 in development and production
这是一个名为figaro的宝石,它为google OAuth2配置了每个环境。
答案 1 :(得分:0)
我不能代表FB或Twitter,但在Google的Oauth实现中,您可以注册几个oauth回调网址。因此,您只需要在应用程序中使用一些逻辑来感知它处于测试模式,然后使用适当的回调URL启动Oauth流。存在缺点,例如实时和测试刷新令牌之间的冲突,但它们是可管理的。
在我的应用中,我有一个管理所有这一切的单身人士。当我的应用程序需要启动Oauth流程时,它会使用请求URL和任何其他显着数据(例如调试标志)调用单例,并且单例返回正确的回调URL,客户端ID等。
答案 2 :(得分:0)
我还没有找到一种手动方法,可以让dev访问所有相关设备:
假设网络中的所有设备都依赖于相同的DHCP和DNS服务器,那么您就可以从网络上的任何设备访问alice.dev.myapp.com
或bob.dev.myapp.com
。
请注意,您将分别为每个其他环境管理oauth配置,但遵循相同的方法。
可能有一些工具可以自动注册开发人员的机器IP和主机名,以简化这一难题。每个开发人员在每个提供商上注册oauth配置是最乏味的一步。
更新
*如果您使用xip.io url,则可以跳过DNS部分,例如10.0.0.123.xip.io如果您知道Alice是10.0.0.123,但您仍然希望修复该IP,因为您不希望在步骤4中更新oauth令牌的URL。