在开发和生产环境中使用OAuth
关于这一点,我已经看到了其他的问题(,和),但我对任何解决方案都不满意,所以我再次提出这个问题。我正在启动一个web应用程序,它将利用来自多个提供商(Google、Facebook、Twitter、Yahoo)的OAuth进行身份验证。我正在努力寻找一种适合本地开发环境和生产环境的配置 我发现的主要解决方案是在每个提供商内注册多个应用程序,为每个应用程序接收不同的消费者密钥和密码: “我的应用程序生产”-带有回调URI “我的应用程序开发”-带有回调URI 在本地主机文件中添加一个条目,指向在开发和生产环境中使用OAuth,oauth,twitter-oauth,google-oauth,facebook-oauth,Oauth,Twitter Oauth,Google Oauth,Facebook Oauth,关于这一点,我已经看到了其他的问题(,和),但我对任何解决方案都不满意,所以我再次提出这个问题。我正在启动一个web应用程序,它将利用来自多个提供商(Google、Facebook、Twitter、Yahoo)的OAuth进行身份验证。我正在努力寻找一种适合本地开发环境和生产环境的配置 我发现的主要解决方案是在每个提供商内注册多个应用程序,为每个应用程序接收不同的消费者密钥和密码: “我的应用程序生产”-带有回调URI “我的应用程序开发”-带有回调URI 在本地主机文件中添加一个条目,指向lo
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等。我还没有找到一种不太手动的方法,允许开发人员访问所有相关设备:
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可以配置为使用代理服务器吗?如果是这样,也许你也可以用一些代理路由规则来解决你的问题。如果有帮助,我会很高兴的