2013-08-19 223 views
2

我们开发了两个应用程序使用的REST API:一个在Android上运行,另一个在iOS上运行。该API不公开 - 我们在内部构建了应用程序。OAuth - 每个消费者平台的不同消费者密钥

为每个不同的平台提供不同的消费者密钥是否有意义(例如:智能手机上的iOS,iOS上的iOS上的一种,智能手机上的Android上的一种)?

有几个键的一个优势是能够轻松地进行设备分段分析(但是,可以用其他方式完成)。

两个策略之一的任何优点?

有什么优点和缺点?

谢谢。

回答

3

在OAuth环境中,任何在最终用户设备(包括iOS和Android设备)上运行的应用程序都被称为“公共”客户端,因为密钥随应用程序一起分发。

这与服务器端Web应用程序相反,其中密钥可以安全地保密。只有经过许可的开发人员和操作人员才能访问它。对于分发给设备的应用程序,即使使用模糊处理,也不可能保证该秘密不会暴露给未授权方(基本上任何人在您的口袋中使用您的应用程序),从而有效地公开提供该密钥。

鉴于此,从安全角度来看,为访问您的API的设备分配唯一的客户端ID和密码几乎没有意义。恶意开发者可以非常轻松地使用公共证书来构成“已批准”的应用程序。

正如您所看到的,您可以使用客户端ID来执行设备分段,但也有其他方法可以执行此操作,例如User-Agent标头不会导致错误的安全隐患。

总之,基于平台向应用发布唯一的客户端ID没有真正的好处。但是,考虑公共客户在授权访问API时如何考虑安全问题是很重要的。

+0

嗨Jared。感谢您的回答。其实我们正在内部构建2个移动应用程序。我的问题并不清楚 - 我编辑过它。 你觉得你需要根据这个来调整你的答案吗? – dan

+0

我会做的是分配以下client_id:'your_app_name:ios'和'your_app_name:android',我不会为应用程序分配一个秘密。实际上,client_id相当于一个更容易解析的用户代理。您可以使用它来分割应用程序,例如,显示用户正在使用的设备列表,并允许它们在设备丢失时关闭设备。 –

+0

有趣的贾里德。您的client_id将成为OAuth条款中的consumer_key,对不对? – dan

0

如果您将使应用开发人员为每个平台使用多个OAuth使用者密钥,那么开发人员将不会感到满意!开发人员必须以某种方式管理这些密钥才能服务。如果应用程序开发人员需要重新发布密钥会怎么样?如果他们在新平台上推出应用程序?这些开发人员需要多少额外的努力来维护密钥? 另外,请考虑一些您不知道的平台:新的移动操作系统,奇怪的设备,不常见的用例。你想限制和控制你的服务的所有变种使用?

您仍然可以这样做的原因之一是,您可以针对每个平台单独出售您的API服务(并可能使用不同的价格)。

相关问题