我正在构建一个chrome扩展程序,它将与salesforce-chatter api进行交互。但对于使用oAuth(用户代理流)身份验证的用户,我需要将我的客户端密钥嵌入到我的扩展中。
这会导致任何安全问题吗?或者有没有办法使用oAuth而不在我的扩展中嵌入客户端ID?
答案 0 :(得分:6)
客户端ID 必须包含在请求中,因此提供商知道请求来自您,正如@Matt Lacey已经指出的那样。通常情况下,提供程序还会发出一个机密的客户端密钥,它还包含在访问令牌请求中,因此提供程序可以验证您的应用程序是否可以使用客户ID 。
Chrome扩展程序在开放平台上运行,并且平台本身不提供任何方法来对服务器进行身份验证(salesforce随后也必须支持)或安全地存储属性(如果不是不可能在开放时很难)不幸的是,不可能保持客户端机密机密。
由于这是一个常见问题,因此OAuth规范中已经考虑过它(请参阅section 10.1 Client Authentication和10.2 Client Impersonation)。因此,提供商需要进行额外的检查,但在客户端,您无法采取任何措施来有效提高安全性。
如果您希望更深入了解将来如何在Android设备上处理此问题,请查看我的回答here。
答案 1 :(得分:2)
您必须在扩展程序中嵌入客户端ID,以便让Salesforce知道该应用程序正在尝试进行身份验证。这些客户端ID旨在始终存储并传递到服务器,因此只要您以安全的方式存储它,就不会有问题。
答案 2 :(得分:0)
正如Matt解释的那样,如果您要创建打包的应用程序,您将被迫包含客户端ID。另一种解决方案是将应用程序编写为托管应用程序:
What is the difference between packaged apps and hosted apps?
这样做的缺点是管理Web服务器的复杂性增加了。但它会提高安全性。