javascript - 如何进行高效的客户端认证?
问题描述
对于我的 Web 应用程序,它同时具有公共/未登录视图和管理视图,我一直在使用完全分离的前端(React 与 nginx 一起提供服务)和后端。将两者分开的吸引力之一是,如果我愿意,我可以完全用 Go 或 Rust 重写后端,而完全不影响前端。
但是,要进行客户端身份验证,我基本上必须维护两种不同的“状态”:一种在客户端,一种在服务器上。
由于客户端身份验证有风险/不安全,因此我将前端的所有经过身份验证的组件/路由包装在一个授权 HOC 中,该 HOC 向服务器发出 HTTP 调用以查看用户是否被授权。这更安全,但在生产中明显慢,每条路线渲染延迟近 2 秒。
另一种方法是不那么安全,只需在客户端维护身份验证而不需要 HTTP 调用(即isAuth
在 redux 中设置为 true)。这意味着用户可以绕过受保护的路由,但不会造成太大的损害,因为服务器使用了身份验证中间件。
这里有什么建议、经验或意见吗?我应该只是去同构并将自己耦合到全栈 Javascript 吗?
解决方案
当用户登录时,您应该在您的服务器上生成会话 cookie 或身份验证令牌。它应该有某种生命周期,这样它就不会永远好。然后您应该将身份验证令牌存储在客户端上,并在以后的请求中将其用作身份验证标头。您的 api 应该在所有未来的请求中都需要一个 authtoken 作为标头,并检查以确保 auth token 仍然有效。如果有效则返回常规响应,如果不返回 40x 会话超时错误。
推荐阅读
- angular - 如何使用 Sqlite3 从 Angular/Spring Boot 存储图像
- c++ - 从 std::stringstream 读取 uint8_t 作为数字类型
- reactjs - React Intl-无法读取未定义的属性“formatMessage”
- r - 词法错误:UTF8 字符串中的无效字节
- php - 在php中将Json对象插入数据库
- cron - 为什么骆驼需要`+`登录cron表达式?
- java - (二维数组)Java 错误:需要常量表达式
- reactjs - Typescript React 组件获取返回值
- c# - GridView 排序和删除;错误的行
- php - 如何从 ec2 实例部署 PHP 应用程序?