响应原生Salesforce“连接应用程序”的身份验证体系结构

问题描述:

我想为我的非营利组织创建面向公众的反应原生应用程序(通过App Store和Google Play下载),该组织根据他们的捐款历史存储在我们的Salesforce数据库中(使用NPSP)。响应原生Salesforce“连接应用程序”的身份验证体系结构

我的基本想法是有使用某种类型的密码认证方式的用户进行身份验证(react-native-lock,还有什么对原生移动应用?)然后在API调用Salesforce的使用验证用户的姓名和电子邮件作为查询参数REST API。我正在考虑从创建/注册我的Salesforce“连接的应用程序”硬编码消费者密钥和消费者秘密,或者硬编码消费者密钥,然后用来自Heroku应用程序/服务器的消费者密钥丰富API调用,然后将该API调用转发给Salesforce。丰富的代理API服务器是否过度增加了安全性?

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

我的问题是,通过构建这个应用程序,我会以难以正确保护的方式暴露我们的数据库。这对于本地应用程序架构来说是一个糟糕的主意吗?我还可以通过使用反应本地,无密码身份验证和Salesforce来实现我的目标,即在本机应用程序中向会员呈现数字会员卡?我认为我们不想为每个捐助者创建Salesforce用户。这对我来说也不正确。

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

你指出我还建议,你应该有某种服务器端组件,其中API密钥和/或硬编码证书的存储可以被认为是安全的。

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

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

+0

谢谢你的回答。你认为2因素认证(短信+电子邮件)对于数字会员卡来说有些过火吗? – Eric

+1

如果这取决于我,我会强烈推荐使用基于电子邮件的无密码身份验证。这样,通过一步(更好的用户体验),您将获得一个经过验证的用户,并证明提供的电子邮件确实由该用户拥有。 –

+0

我应该在我的移动应用程序项目之外的文件中拥有使用者密钥,然后在部署之前(即使用构建脚本)包含它?或者,将消费者密钥提交到配置/设置是否合理?js文件在私人github存储库,只要它仍然是一个私人回购?我对消费者机密和代理api服务器有同样的问题。 – Eric