客户端如何使用Passport和JWT进行授权?

How to use Passport & JWTs on client-end for authorization?

我目前正在为朋友的足球队创建自定义 CMS。架构如下:

在后端,我有一个与数据库交互的 API (mongoDB)。

在前端,我有一个快速服务器,它使用模板引擎把手为页面提供服务。

目前我已经设法使用 Passport 和 JWT 验证对 API 的请求,这非常适合查询 API,登录时我在 cookie 中存储了一个具有权限的 JWT用户内部的存储(它是静态页面而不是 SPA,所以我无法访问 local/session 存储)。

我的问题是我正在努力如何在客户端实现授权以访问管理面板。如果用户是管理员,我应该在客户端解码 JWT 并读取用户角色,然后在管理页面提供页面,还是应该将访问前端管理部分的每个请求发送到 API 进行验证检查,然后提供文件。

任何帮助将不胜感激,谢谢。

我认为使用令牌身份验证方法更适合通过 XHR 发出请求,而不是硬重新加载。您采用的方法似乎更适合基于 session 的身份验证策略。我会使用 passport-local 并使用用户名和密码进行身份验证。一旦通过身份验证,用户将存储在服务器端的 session 变量中。您可以从那里检查角色并重定向服务器端。

如果你坚持使用令牌,你可以将它保存在本地存储中,然后在你的管理面板上有一个脚本,它会首先从本地存储中获取令牌,然后使用令牌向服务器发出 GET 请求在 header。如果令牌有效,则发回数据以填充页面,否则发回错误并从前端重定向。要在检查令牌有效性时显示一个空的管理面板,您可以显示一个加载屏幕,直到请求完成。