【发布时间】:2020-05-14 23:13:30
【问题描述】:
我正在创建一个 REST API 来服务于前端,但我不清楚一些事情,希望有人能阐明这种方法的最佳实践。
API 是 Flask,我使用的是 JWT。因此,当用户正确进行身份验证(传递正确的用户名/md5 密码)时,我将传回 JWT。我还根据用户名将 JWT 存储在数据库中,以确保在任何给定时间每个用户只有一个 JWT。即使他从另一台 PC 登录,我也创建了一个将当前令牌列入黑名单的程序。
我不清楚的是前端(比如 Angular)如何确定用户是管理员还是标准用户。我应该回传(例如 0 或 1)以便前端知道隐藏某些导航链接吗?如果您将某些内容存储到 cookie 中,用户仍然可以更改该值并访问管理链接,所以也许这就是我感到困惑的地方。
另外,在前端,您如何检查用户是否已被撤销?假设他已登录,令牌被撤销,然后点击另一个仅限会员的链接。我们是否应该查看其余响应以确定他是否有效?例如,如果令牌过期,我们返回“Token Revoked”
谢谢!
【问题讨论】:
-
FWIW,使用 JWT 和 数据库状态在某种程度上违背了目的。 JWT 主要是为了让您的后端可以是无状态的。
-
是的,将 some 标志从您的登录 REST API 传递回您的前端,告诉它它是什么类型的用户。即使您的用户在客户端操作某些东西,他们也可能能够访问 admin 模板 等,但他们永远无法从 API 获取 admin data .如果您甚至想隐藏模板,那么您需要在登录后从服务器获取它们并在那里进行权限检查。
-
@deceze 如果您不存储令牌,那么您如何跟踪谁拥有什么令牌并使令牌无效?
-
我的意思是,如果您需要这种状态,那么您可以只使用会话 ID 之类的东西而不是 JWT。不过这并不重要。
-
@deceze thans 对于这些点