在开发和生产环境中使用OAuth

时间:2013-11-27 03:46:04

标签: oauth twitter-oauth google-oauth facebook-oauth

我已经看到有关此问题的其他问题(hereherehere),但我对任何解决方案都不满意,所以我再问一遍。我正在启动一个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吗?

3 个答案:

答案 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访问所有相关设备:

  1. 根据用户的MAC地址,通过本地网络的DHCP系统为每个开发人员的机器分配一个固定的IP,或者(不太推荐)让他们选择一个IP并希望获得最佳的
  2. (可选*)根据该IP
  3. 为每个开发人员的计算机分配本地网络中的DNS主机名
  4. 使用开发人员计算机的主机名为每个提供商注册开发人员的oauth条目。
  5. 每个开发人员都会将其应用程序配置为使用其唯一的oauth dev令牌。
  6. 假设网络中的所有设备都依赖于相同的DHCP和DNS服务器,那么您就可以从网络上的任何设备访问alice.dev.myapp.combob.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。