我正在使用 Spring Framework 开发一个 REST 应用程序,作为要求的一部分,我们必须将系统的不同功能保护到不同的用户角色(非常标准的东西)。我当前确定当前登录用户角色的方法是,每次他们从前端调用 REST url 时,我都会在请求标头中添加一个 Base 64 编码的字符串。此字符串在解码后解析为他们的用户名和 bCrypt 生成的密码哈希,格式为 username:hashedpassword。
我有点担心这是不安全的,即使请求将通过安全的 HTTP 连接发出,因为它可能使潜在的黑客至少可以访问用户的用户名。他们无法获得密码,因为那只是一个散列值,但他们可以使用该散列值成功调用 REST API。
如何正确保护该系统?我是否需要为会话添加会话令牌或某种随机生成的密钥?
我的后续问题是我怎样才能 RESTfully 做到这一点?我在想我可以在登录时生成(使用 bCrypt)一个代表 username:hashedpassword 的哈希值,将其保存到数据库中,并在进行 REST 调用时对其进行检查。当用户注销时,只需将其设置为 null。冲洗并重复。这样,任何潜在的攻击者都只会得到一个不会暴露用户名的 bCrypt 字符串,但他们仍然可以使用该字符串来调用 REST API。