【问题标题】:How to use Passport & JWTs on client-end for authorization?如何在客户端使用 Passport 和 JWT 进行授权?
【发布时间】:2017-10-09 15:02:34
【问题描述】:

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

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

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

目前我已经设法使用 Passport 和 JWT 对 API 的请求进行身份验证,这对于查询 API 来说很好,在登录时我在用户的 cookie 存储中存储了一个具有权限的 JWT(它是静态页面而不是SPA,因此我无法访问本地/会话存储)。

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

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

【问题讨论】:

    标签: node.js express jwt passport.js express-jwt


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回复。如果我要使用本地策略进行身份验证,这是否也适用于我将从客户端前端查询和发布的受保护 API 路由?
    • @makory 是的,您可以为受保护的路由创建一个中间件,或者在路由函数本身中检查会话中的用户对象。您可以验证用户是否具有适当的角色并返回适当的响应。
    猜你喜欢
    • 2018-12-11
    • 1970-01-01
    • 2019-11-15
    • 2017-05-16
    • 2017-09-05
    • 2017-01-12
    • 2018-02-02
    • 2017-06-24
    • 1970-01-01
    相关资源
    最近更新 更多