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