我们正在构建一个SaaS应用程序,我们称之为http://mysaasapp.com。用户注册后,他们会使用子域名http://myinstance.mysaasapp.com或自定义域名http://instance.mycompany.com访问其实例,依此类推。
我们正在寻求与其他服务(Facebook,Twitter等)集成,以便我们的用户可以链接到他们实例中这些服务的帐户。对于OAuth重定向回调,Twitter非常宽松(当我们发出OAuth请求时,我们可以设置回调/重定向URL)。然而,Facebook并不是那么响亮,回调/重定向域是在facebook.com上的应用程序配置中设置的
当用户在其实例上使用自定义域名时,他们可以选择让我们网站上的子域名(http://myinstance.mysaasapp.com)处于非活动状态。这意味着我们无法将OAuth的回调域设置为mysaasapp.com并期望它能够正常工作。
解决方案是使用OAuth代理(http://proxy.mysaasapp.com)。我们之前使用过HybridAuth,我们相信我们应该可以轻松将其转换为OAuth代理。
说完了:
我们是否应该使用OAuth代理仅代理身份验证请求?一旦我们获得了访问令牌,我们是否应该继续通过代理代理请求,还是应该直接从我们的实例连接到提供者?换句话说,是否有任何OAuth安全API将API调用(在身份验证之后)限制到某些已定义的域?
我应该如何保护OAuth代理,以便请求只能来自我们应用的实例,并且响应只能转到我们应用的实例?
答案 0 :(得分:2)
所以这就是我最终做的事情。
我创建了一个非常简单的Web应用程序,它是围绕HybridAuth构建的。此webapp将托管在oauth.mydomain.com。
当发生自己实例的用户想要连接到Facebook等提供商时,应用实例会通过发布提供者类型和一些其他信息来与oauth.mydomain.com建立服务器到服务器的连接。代理返回一个令牌。
然后,我们将用户重定向到oauth.mydomain.com,同时将令牌作为get参数传递。 oauth.mydomain.com使令牌无效并将信息存储在用户的会话中。
然后,用户继续向提供商进行身份验证。如果成功,oauth.mydomain.com会将消费者令牌和密钥发回特定端点的实例。
发布完成后,我们会将其重定向回他们在thedomain.com上的页面
我决定不代理所有请求(只代理身份验证请求),因为这是一个简单的方法,而且提供程序(至少我已经查看过)只在auth过程中实现了域限制。