我正在为个人项目创建 API 和 SPA,并且我在以下用于验证用户身份的解决方案之间犹豫不决(注意:通过 HTTPS):
我什至不考虑 OAuth,因为它看起来真的很痛苦,而且我不需要使用其他应用程序进行身份验证,我只关心对用户进行身份验证。
据我所知,JWT 似乎是一个不断发展的标准。它基本上保存了调用者的数据,因此每次他向您发出 API 请求时,您都会使用您的
encrypt(base64(header) + "." + base64(payload))
,并将其与令牌本身最后部分中提供的签名进行比较。它避免了必须执行数据库事务。问题是,如果我使用 JWT 1)我无法手动撤销特定令牌,最重要的是2)如果我更改用户的权限,之前授予的 JWT 仍将具有旧数据使用他的旧权限,只要他没有使用新权限获得新令牌,就可以授予/限制他对某些数据的连续访问,这确实是有问题的,我很惊讶我还没看到有人提到这个问题。此外,3) JWT 声称允许服务器在无需访问数据库的情况下验证访问,但我无法想象任何不以某种方式涉及数据库的 API 请求,即使只是为了返回用户请求的数据。所以这个论点对我来说没有任何意义。 对我来说,我现在最好的选择是
选项2。网站的流量将受到限制且较小,因此将令牌存储在数据库中似乎是一个小而值得的权衡,并允许我对这些令牌执行任何我想要的操作,包括管理它们的生命周期和权限。它还可以避免像选项 1 那样暴露用户的凭据,以防他们在其他在线服务中使用相同的凭据。 我只是想知道我对智威汤逊的担忧是否正确,或者我是否误解了它的功能?另外,即使我已经阅读了很多有关这些不同选项的内容,请随意链接任何可以启发我并帮助我做出更好选择的内容。谢谢。