1

我正在设计一个与StormpathFacebook 集成的简单 REST API,并想知道什么是用户身份验证的最佳模式。目前我没有任何用于创建用户的端点,因此对我的端点的所有请求都经过身份验证,如下所示:

  1. Application获取基于我的应用程序API_IDAPI_SECRET在我的应用程序中配置的Stormpath对象
  2. Account根据每个请求中指定的 Facebook 令牌获取 Stormpath对象
  3. 基于帐户状态验证请求或拒绝

这或多或少遵循官方指南并且工作正常,因为即使用户帐户不存在,它也会在第一次向 Stormpath 获取帐户请求时创建。它是否有意义,是否足够安全?我正在寻找一些文档或最佳实践,但找不到任何东西。

我还需要获取/生成唯一的用户 ID,以便我可以与系统中的用户数据建立一些关系 - 所以另一个问题,这里最好的方法是什么:

  1. 生成一些唯一的 ID,将其与从 Stormpath 获取的用户电子邮件相关联并保存在我的系统中 - 我认为这违反了像 Stormapth 这样封装所有用户数据的服务的一些想法
  2. 执行与上述相同的操作,但将其存储在 Stormpath 帐户中customData
  3. 使用 Stormapth 用户资源 ID,可以从用户 URI 中获取

请指教。

只是为了记录,我正在使用Stormpath Java SDK并将 API 设计为移动社交应用程序的后端,因此安全性对我来说非常重要。

4

1 回答 1

2

完全披露,我管理产品@Stormpath。我将使用您的反馈来改进文档。

如果不了解您正在构建的 REST API,很难说它是否安全。如果您为猫图片制作了 REST API,那么与医疗/财务信息相比,我的答案会有所不同。一种看待它的方式是,Facebook 具有 Graph API (REST),它们保护需要您使用的相同访问令牌的访问。还有其他标志会让我说它不安全,就像您使用没有 TLS 的 HTTP 一样。

对于您的第二个问题,如何将 Stormpath 与您的数据联系起来。我不会说通过对您和您的应用程序有意义的应用程序建模,您会违反有关 Stormpath 的任何内容。Stormpath 的客户将有关其用户的所有信息存储在 Stormpath 中。Stormpath 也有客户仅将 Stormpath 用于身份验证和授权数据,并使用 customData 来绘制 Stormpath 用户帐户与其数据之间的链接。

您存储信息的方式/位置取决于您的需求。如果您开始使用 Stormpath 验证用户帐户,则将唯一标识符/主键放在用户帐户的 customData 中是有意义的。如果您从查询数据存储中的用户数据开始并需要获取 Stormpath 用户帐户,那么您需要将用户帐户的 href 存储在数据存储中。

Stormpath SDK for Java 的一个不错的功能是,当您使用 Facebook 进行身份验证时,返回的对象将显示该帐户是新创建的,还是 Stormpath 具有用于访问令牌的现有帐户:

https://docs.stormpath.com/java/apidocs/com/stormpath/sdk/provider/ProviderAccountResult.html

这意味着您将知道何时需要在数据存储中为帐户创建记录并使用 customData 和/或用户帐户 href 连接两者。

于 2015-05-05T15:33:35.530 回答