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

在开发和生产环境中使用OAuth,oauth,twitter-oauth,google-oauth,facebook-oauth,Oauth,Twitter Oauth,Google Oauth,Facebook Oauth,关于这一点,我已经看到了其他的问题(,和),但我对任何解决方案都不满意,所以我再次提出这个问题。我正在启动一个web应用程序,它将利用来自多个提供商(Google、Facebook、Twitter、Yahoo)的OAuth进行身份验证。我正在努力寻找一种适合本地开发环境和生产环境的配置 我发现的主要解决方案是在每个提供商内注册多个应用程序,为每个应用程序接收不同的消费者密钥和密码: “我的应用程序生产”-带有回调URI “我的应用程序开发”-带有回调URI 在本地主机文件中添加一个条目,指向lo

关于这一点,我已经看到了其他的问题(,和),但我对任何解决方案都不满意,所以我再次提出这个问题。我正在启动一个web应用程序,它将利用来自多个提供商(Google、Facebook、Twitter、Yahoo)的OAuth进行身份验证。我正在努力寻找一种适合本地开发环境和生产环境的配置

我发现的主要解决方案是在每个提供商内注册多个应用程序,为每个应用程序接收不同的消费者密钥和密码:

“我的应用程序生产”-带有回调URI

“我的应用程序开发”-带有回调URI

在本地主机文件中添加一个条目,指向
local.myapp.com
127.0.0.1
,并根据环境为应用程序添加一些配置,以使用正确的使用者密钥,这样就可以了,对吗

但是我的应用程序是,我需要测试我的开发环境,在我的PC上运行多个其他设备,比如我的iPhone和iPad,它们都不能解析开发回调URI

假设我的网络上已经有一个DNS服务器,可以在那里添加
local.myapp.com
条目,而不是我的本地主机文件,现在可以从网络上的任何设备访问我的开发实例

但我的开发团队都在同一个本地网络上运行。现在,
local.myapp.com
为每个人指向相同的IP。让我们回到在每个开发人员的计算机上设置hosts文件,以便他们都可以在自己的工作站内独立工作。现在,没有人能够再次从iPhone上测试他们的开发实例。对于每个开发人员来说,仅仅为了指定一个唯一的回调URI而向提供者注册一个应用程序似乎不是一个正确的答案


通常,当我为一个看似简单的问题找到一个复杂的解决方案时,这通常意味着我在做一些根本错误的事情。我是否遗漏了OAuth的某些内容,它不打算这样使用吗?我很想完全放弃OAuth,只使用OpenID(不需要应用注册,可以在应用中指定回调URI),但随后我失去了Facebook和Twitter上的两个大人物。我真的不需要任何用户的数据,只要有可用的数据就好了。有人能把我带回OAuth吗?

我发布了以下关于我编写的rails应用程序的答案:


这是一个名为figaro的gem,它为google OAuth2按env配置。

我不能为FB或Twitter说话,但在google的Oauth实现中,您可以注册几个Oauth回调URL。因此,您只需要在应用程序中使用一些逻辑来感知它处于测试模式,然后使用适当的回调URL启动Oauth流。也有缺点,如实时和测试刷新令牌之间的冲突,但它们是可管理的


在我的应用程序中,我有一个管理所有这些的singleton。当我的应用程序需要启动Oauth流时,它会使用请求URL和任何其他显著数据(如调试标志)调用singleton,singleton会返回正确的回调URL、客户端ID等。

我还没有找到一种不太手动的方法,允许开发人员访问所有相关设备:

  • 根据每个开发人员的MAC地址,通过本地网络的DHCP系统为他们的机器分配一个固定的IP,或者(不太推荐)让他们选择一个IP并希望得到最好的结果
  • (可选*)基于该IP在本地网络中为每个开发人员的计算机分配一个DNS主机名
  • 使用开发人员计算机的主机名在每个提供程序上为开发人员注册oauth条目
  • 每个开发人员将其应用程序配置为使用其唯一的oauth开发令牌
  • 假设网络中的所有设备都依赖于相同的DHCP和DNS服务器,那么您就可以从网络上的任何设备访问
    alice.dev.myapp.com
    bob.dev.myapp.com

    注意,您将分别管理每个环境的oauth配置,但遵循相同的方法

    可能有一些工具可以自动注册开发人员的机器IP和主机名,以简化这部分难题。在每个开发人员的每个提供程序上注册oauth配置是最繁琐的步骤

    更新


    *如果您知道Alice是10.0.0.123,那么您可以跳过DNS部分,例如,如果您知道Alice是10.0.0.123,那么您可以使用10.0.123.xip.io,但是您仍然希望该IP得到修复,因为您不希望在步骤4中不断更新oauth令牌的url

    只是为了测试,对吗?为什么不把每个web应用程序都作为虚拟目录呢?我不太明白你的意思。你能详细说明一下吗?你找到解决办法了吗?我在为同样的事情挣扎;oauth提供商不允许在源代码中使用通配符,因此我无法使用
    alice.dev.myapp.com
    bob.dev.myapp.com
    ,但如果所有开发人员共享
    dev.myapp.com
    ,我不知道如何将平板电脑和手机指向正确的开发人员。为每个开发人员创建oauth入口点似乎是唯一的方法。但我很想知道你们是否找到了更好的方法。这看起来像是一个管理属性文件的奇特工具。当OAuth回调转到local.myapp.com时,如何在我的iPhone上测试我在PC上运行的应用程序?当然,我可以处理逻辑,知道它是生产还是开发,并使用正确的消费者密钥/机密。但是,在dev中使用我的iPhone无法解析的回调uri从我的iPhone进行测试呢?我需要在开发中的移动设备上进行测试。所以这是一个DNS问题?使用类似于AWS Route 55的东西并在那里注册您的开发服务器,以便它公开解析。iPhone可以配置为使用代理服务器吗?如果是这样,也许你也可以用一些代理路由规则来解决你的问题。如果有帮助,我会很高兴的