用户在应用程序外部进行身份验证,请求作为 HTTP 标头“Authorization”传入,其值为“Bearer TOKEN”。我们需要在所有应用程序端点上进行身份验证,从令牌中解析用户名,使用自定义数据访问加载角色。
我了解我需要执行以下操作:
这听起来正确吗?
是否有推荐/正确/开箱即用的方法来实现这样的目标?
读完你的清单后,我会直截了当地说不,你列出的你想做的事情不是推荐的做事方式。
当我阅读您的列表时,很明显您认为 JWT 令牌应像会话 cookie 一样处理。
您不想直接从数据库向用户加载来自 JWT 的数据。这将使您的服务非常容易受到洪水攻击。
JWT 不是会话令牌,不应该这样使用。
这意味着您永远不应该将 JWT 直接分发给浏览器。令牌可能被盗,您无法远程使它们失效,并且无法将它们安全地存储在浏览器中。
包括 Spring 团队本身在内的多个安全来源建议您应该实现 BFF 模式,最好使用 Open-ID 连接标准,这意味着令牌以安全、http 的格式作为不透明令牌提供给浏览器-仅限饼干。
请求完成后,应通过某种代理将它们交换到 JWT。这样您就只能在私有企业网络内的微服务之间使用 JWT。
我建议您阅读 Open ID connect 以及 使用 pkce 的授权代码流程 BFF 模式,然后使用 Spring Security 中包含的内置 Oauth2 功能。
看在上帝的份上,不要构建一些自制的定制安全解决方案。