我有一个基于Web的API,我正在构建Spring Boot中构建的API并使用OAuth2。该API适用于移动应用程序。将快速注册集成到使用Spring Boot的现有API中使用OAuth2
作为移动应用程序登录的一部分,登录选项之一是使用您的Twitter/Facebook帐户。
我最初的想法是让APP通过Facebook/Twitter认证用户,然后将令牌传递给API。然后,API将使用Facebook/Twitter验证令牌,收集FB/Twitter ID并使用该ID创建新帐户。但是,这种方法的问题是,我不确定如何使用现有的OAuth库创建持票人令牌,因为OAuth库在标准登录(用户名/密码)期间处理所有这些。
另一种选择是让APP通过Facebook/Twitter对用户进行身份验证,然后使用用户FB/Twitter ID作为用户名,通过API将用户注册为正常用户,但这种“感觉”方式不太安全,但整合更容易。
当时,认证令牌由OAuth库存储在MySQL数据库表'oauth_access_token'中。我想我可以手动创建JWT并自己更新此表。
我接受任何有用的建议。
**不要加密密码**,当攻击者获取数据库时,他也会得到加密密钥。使用随机盐在HMAC上迭代大约100毫秒的持续时间,并用散列表保存盐。使用诸如password_hash,PBKDF2,Bcrypt和类似函数的函数。关键是要让攻击者花费大量时间通过强力查找密码。 – zaph
对不起,我应该提到。密码使用BCrypt存储在数据库中,该密码与盐一起存储密码。我将使用的唯一加密方法是为社交媒体帐户生成密码。如果用户的Twitter ID是123456,我将使用加密密钥创建一个密码,然后将结果存储到数据库中,首先将它传递给BCrypt。显然,如果有人想掌握项目源代码,他们将能够确定我们如何创建社交密码,但我想不出另一种方式来做到这一点。 – SheppardDigital
攻击者将获得管理员访问您的服务器的权限,这就是攻击的工作原理。攻击者是专业人员,他们每天都会去工作,并在攻击系统上工作,这是一项常规工作。他们技术娴熟,极有可能在安全和密码学方面拥有比您更好的技能,并拥有出色的攻击工具。显然你在某种程度上理解了这一点,或者你不会在服务器上使用任何加密技术。如果您有一个加密密钥存储在服务器上的文件中,它将被找到并使用。你可能永远不会知道有攻击。 – zaph