3

我正在考虑使用 Yodlee FinApp API 开发应用程序。

他们的 REST 协议要求您将用户登录到他们的系统以检索数据。为此,您需要发送登录名和密码。成功的请求会返回一个有效期为 30 分钟的令牌。在 30 分钟过去之前,您必须重新登录用户才能检索新令牌。在我看来,这就是问题所在。

我可以设置一些东西,每次用户登录我的应用程序时,我都会立即将他们的登录信息和密码发送给 Yodlee 并在那里登录。然后,我不需要将他们的密码以纯文本形式存储在我的数据库中。但是当 30 分钟过去了会发生什么呢?我实际上并不“知道”他们的密码,因此我无法为他们获取新令牌,并要求他们再次登录。让用户每 30 分钟不断地重新登录是一件非常痛苦的事情。

或者,我可以在他们注册我的应用程序时为他们生成我自己的密码,并将其用于我的应用程序与 Yodlee 的交互。但是后来我将他们的 Yodlee 密码以纯文本形式存储在我的数据库中。假设有人能够访问我的服务器,他们将拥有我的应用程序的凭据以及所有用户凭据,因此他们将能够模仿我的应用程序的登录过程并获得对用户事务的访问权限。这似乎是个坏主意。

这里的正确方法是什么?似乎我正在调查的两种途径都有严重的缺点,但也许我错过了另一种选择?

4

2 回答 2

1

@aardvarkk- 您打算如何在您的应用程序上对用户进行身份验证?

如果我理解正确,那么您应该将用户凭据存储在您的应用程序中以验证用户并检查他/她是否是新用户。

当您将拥有此数据时,您可以在 30 分钟之前代表用户使用相同的数据再次登录,并且仅当用户仍处于会话状态时,而不是每 30 分钟一次。

我们建议您不要以纯文本形式存储任何用户凭据。您可以在存储之前对其进行加密,在将其发送给 Yodlee 之前对其进行解密。

此外,对 Yodlee 生产环境的应用程序凭据的访问受到 IP 限制,因此只有来自您的静态 IP 的请求才能成功连接到 Yodlee。

[更新] 对于这种情况:您可以调用touchConversationCredentialsAPI 来扩展对话凭证的相对(或不活动)超时有效性,即 UserSessionToken。您需要在其中传递 userSessionToken。您可以在用户会话的第 29 分钟之前调用它以将他/她的会话再延长 30 分钟。但是有 120 分钟的绝对超时,因此在初始会话创建 120 分钟后它将过期。

于 2014-04-18T12:55:42.273 回答
0

首先,尽量避免以纯文本形式存储用户密码。如果出现任何问题(例如,如果您被黑客入侵),那只是要求一个痛苦的世界,并且可能会让您面临各种法律问题。真的,不要走那条路。实际上,如果您根本不了解他们的 Yodlee 证书,那会更好。你不想成为他们,你只想代表他们与系统交互。

REST 并没有真正说明系统如何相互验证。通常有很多可能性。您所能做的就是尝试使用您拥有的任何凭据进行连接,如果失败,请保释给用户(嗯,客户端代码),以便他们可以给您另一个令牌。REST 确实明确说明了应该如何传达身份验证失败,即401 HTTP 响应,但仅此而已。

于 2014-04-18T14:01:02.777 回答