我正在设计一个带有Stormpath
Facebook集成的简单REST API,并想知道什么是用户身份验证的最佳模式。目前我没有用于创建用户的任何端点,因此对我的端点的所有请求都经过以下身份验证:
Application
和API_ID
获取Stormpath API_SECRET
对象Account
对象这或多或少official guide并且工作正常,因为即使用户帐户不存在,也会在首次获取帐户请求到Stormpath时创建。它有意义并且足够安全吗?我正在寻找一些文档或最佳实践,但找不到任何东西。
我还需要获取/生成唯一的用户ID,这样我就可以在系统中与用户数据建立一些关系 - 所以另一个问题是,这里最好的方法是什么:
customData
请建议。
只是为了记录我正在使用Stormpath Java SDK并将API设计为移动社交应用的后端,因此安全对我来说非常重要。
答案 0 :(得分:2)
完全披露,我管理Product @ Stormpath。我将使用您的反馈来增强文档。
如果不了解您正在构建的REST API,很难说它是否安全。如果您为猫图片制作了REST API,那么与医疗/财务信息相比,我的答案会有所不同。一种看待它的方法是,Facebook拥有图形API(REST),它们保护需要您使用的相同访问令牌的访问权限。还有其他一些标志会让我说它不安全,就像你使用HTTP而没有TLS一样。
关于第二个问题,如何将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连接这两个记录。