首页 > 解决方案 > 如何进行高效的客户端认证?

问题描述

对于我的 Web 应用程序,它同时具有公共/未登录视图和管理视图,我一直在使用完全分离的前端(React 与 nginx 一起提供服务)和后端。将两者分开的吸引力之一是,如果我愿意,我可以完全用 Go 或 Rust 重写后端,而完全不影响前端。

但是,要进行客户端身份验证,我基本上必须维护两种不同的“状态”:一种在客户端,一种在服务器上。

由于客户端身份验证有风险/不安全,因此我将前端的所有经过身份验证的组件/路由包装在一个授权 HOC 中,该 HOC 向服务器发出 HTTP 调用以查看用户是否被授权。这更安全,但在生产中明显慢,每条路线渲染延迟近 2 秒。

另一种方法是不那么安全,只需在客户端维护身份验证而不需要 HTTP 调用(即isAuth在 redux 中设置为 true)。这意味着用户可以绕过受保护的路由,但不会造成太大的损害,因为服务器使用了身份验证中间件。

这里有什么建议、经验或意见吗?我应该只是去同构并将自己耦合到全栈 Javascript 吗?

标签: javascriptrestauthenticationclient-sideisomorphic-javascript

解决方案


当用户登录时,您应该在您的服务器上生成会话 cookie 或身份验证令牌。它应该有某种生命周期,这样它就不会永远好。然后您应该将身份验证令牌存储在客户端上,并在以后的请求中将其用作身份验证标头。您的 api 应该在所有未来的请求中都需要一个 authtoken 作为标头,并检查以确保 auth token 仍然有效。如果有效则返回常规响应,如果不返回 40x 会话超时错误。


推荐阅读