2

我们开发了一个 REST API,供两个应用程序使用:一个在 Android 上运行,一个在 iOS 上运行。API 不公开 - 我们在内部构建了应用程序。

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

拥有多个密钥的一个优点是能够轻松进行设备分段分析(但是,可以通过其他方式完成)。

这两种策略之一的任何优势?

有什么优点和缺点?

谢谢。

4

2 回答 2

3

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

这与服务器端 Web 应用程序形成对比,其中密钥可以安全地保密。只有获得许可的开发人员和运营人员才能访问它。对于分发到设备的应用程序,即使经过混淆处理,也无法保证秘密不会暴露给未经授权的各方(基本上是口袋里有您的应用程序的任何人),从而有效地使密钥公开可用。

鉴于此,从安全角度来看,将唯一的客户端 ID 和机密分配给访问您的 API 的设备几乎没有意义。恶意开发人员可以很容易地使用公共凭据伪装成“已批准”的应用程序。

正如您所注意到的,您可以使用客户端 ID 进行设备分段,但也有其他方法可以做到这一点,例如User-Agent不传达误导性安全含义的标头。

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

于 2013-08-22T21:47:36.420 回答
0

如果您让应用程序开发人员为每个平台使用多个 OAuth 使用者密钥,那么开发人员将不会高兴!开发人员将不得不以某种方式管理您的服务的这些密钥。如果应用程序开发人员需要重新颁发密钥怎么办?如果他们在新平台上启动应用程序?这些开发人员需要多少额外的努力来维护密钥?此外,请考虑一些您不了解的平台:新的移动操作系统、奇怪的设备、不寻常的用例。您想限制和控制服务使用的所有变体吗?

您可能仍然这样做的原因之一是您可以为每个平台单独销售您的 API 服务(并且可能以不同的价格)。

于 2013-08-22T21:26:48.120 回答