【问题标题】:Authentication architecture for react-native Salesforce "connect app"react-native Salesforce“连接应用程序”的身份验证架构
【发布时间】:2017-02-12 01:02:57
【问题描述】:

我想为我的非营利组织创建一个面向公众的 react-native 应用程序(通过 App Store 和 Google Play 下载),该应用程序根据存储在 Salesforce 数据库中的捐赠历史显示数字会员卡(使用 NPSP )。

我的基本想法是让用户使用某种类型的无密码身份验证方案进行身份验证(react-native-lock,本机移动应用程序还有其他内容吗?)然后在 API 调用中使用经过身份验证的用户名和电子邮件作为查询参数Salesforce 的 REST API。我正在考虑从我的 Salesforce“连接应用程序”的创建/注册中硬编码消费者密钥和消费者秘密,或者硬编码消费者密钥,然后使用 Heroku 应用程序/服务器中的消费者秘密来丰富 API 调用,这将然后将 API 调用转发到 Salesforce。没有增加安全性的丰富代理 API 服务器是否矫枉过正?

我在想我会创建一个具有只读权限的 Salesforce 用户,我猜他们的凭据也会被硬编码到应用程序中?并且经过硬编码的、经过身份验证的 Salesforce 只读用户可以使用应用程序用户的姓名和电子邮件作为查询参数进行 API 调用,以检索捐赠信息以确定成员资格。这对我来说听起来很疯狂,但我想不出另一种方法来做到这一点。

我担心的是,通过构建这个应用程序,我会以一种难以正确保护的方式暴露我们的数据库。对于原生应用程序架构来说,这是一个糟糕的想法吗?我还能如何使用 react-native、无密码身份验证和 Salesforce 在本地应用程序中向会员展示数字会员卡的目标?我认为我们不想为我们拥有的每个捐助者创建 Salesforce 用户。这对我来说似乎也不正确。

【问题讨论】:

    标签: oauth-2.0 react-native salesforce auth0


    【解决方案1】:

    在本机移动应用程序、浏览器应用程序或在客户端上运行代码的任何其他应用程序中硬编码的任何类型的机密和/或凭据都不再被视为机密。

    您指出了我的建议,您应该有某种服务器端组件,可以认为存储 API 密钥和/或硬编码凭据是安全的。

    该服务器端组件将在确保由经过身份验证的用户调用后,与系统的敏感部分 (Salesforce) 进行所有通信,在您的情况下,该组件只是经过无密码身份验证的用户步骤并使用代表其身份的令牌从移动应用程序调用服务器。

    要记住的另一件事是,Passwordless Authentication 取决于所使用的频道,您在第一次登录后可能没有用户电子邮件。例如,如果允许用户通过 SMS 接收一次性代码,并且 Salesforce 查询的输入是一封电子邮件,那么您需要在用户进行身份验证后向他询问其他信息,在这种情况下是他的电子邮件。另请注意,在这些情况下,除非您验证用户是所提供电子邮件的所有者,否则您可能会允许任何人查询其他人的捐赠状态。最好只支持通过电子邮件进行的无密码身份验证。

    【讨论】:

    • 感谢您的回答。您认为 2 因素身份验证(SMS + 电子邮件)对于数字会员卡这样良性的东西来说会是过度的吗?
    • 如果由我决定,我会强烈考虑只使用基于电子邮件的无密码身份验证。这样,通过一步(更好的用户体验),您将获得经过身份验证的用户,并证明所提供的电子邮件确实归该用户所有。
    • 我是否应该在我的移动应用程序项目之外的文件中拥有使用者密钥,然后在部署之前将其包含在内,即使用构建脚本?或者,将使用者密钥提交到私有 github 存储库中的 config/settings.js 文件是否合理,只要它仍然是私有存储库?我对消费者机密和代理 api 服务器有同样的问题。
    • 我经常看到的方法是,在源代码控制中只包含开发或 QA 环境的设置,然后在部署时这些设置被生产环境替换。理想情况下,该过程应该是自动化的,否则可能容易出错,但我也看到它是手动完成的,并且在较小的规模上也能正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-23
    相关资源
    最近更新 更多