我们开发了一个REST API,由两个应用程序使用:一个在Android上运行,一个在iOS上运行。 API不公开 - 我们在内部构建了应用程序。
为每个不同的平台提供不同的消费者密钥是否有意义(例如:智能手机上的iOS,平板电脑上的iOS,智能手机上的Android)......
拥有多个密钥的一个优点是能够轻松进行设备分段分析(但是,可以通过其他方式完成)。
两种策略中的一种有任何优势吗?
有哪些优点和缺点?
感谢。
答案 0 :(得分:3)
在OAuth的上下文中,在最终用户设备(包括iOS和Android设备)上运行的任何应用程序都称为“公共”客户端,因为密钥与应用程序一起分发。
这与服务器端Web应用程序形成对比,在该应用程序中,密钥可以安全地保密。只有获准的开发人员和操作人员才能访问它。对于分发到设备的应用程序,即使进行模糊处理,也不可能保证秘密不会暴露给未经授权的各方(基本上是任何人将您的应用放在口袋中),从而有效地将密钥公之于众。
鉴于此,从安全角度来看,将唯一客户端ID和机密分配给访问API的设备的意义非常小。恶意开发人员可以非常轻松地使用公共凭据构建为“已批准”的应用程序。
如您所知,您可以使用客户端ID进行设备分段,但也有其他方法可以执行此操作,例如User-Agent
标头不会传达误导的安全隐患。
总之,基于平台向应用发布唯一客户端ID没有任何实际好处。但是,在授权访问API时,必须考虑公共客户如何考虑安全问题。
答案 1 :(得分:0)
如果您要让应用开发者为每个平台使用多个OAuth使用者密钥,那么开发人员将不会满意!开发人员必须以某种方式管理这些服务的密钥。如果应用程序开发人员需要重新发布密钥怎么办?如果他们在新平台上推出应用程序?这些开发人员需要多少额外的努力来维护密钥? 另外,请考虑一些您不了解的平台:新的移动操作系统,奇怪的设备,不寻常的用例。您想限制和控制服务的所有使用变体吗?
您可能仍然这样做的原因之一是您可以为每个平台单独销售您的API服务(并且可能具有不同的价格)。