如何进行有效的客户端身份验证?

时间:2019-08-12 23:44:13

标签: javascript rest authentication client-side isomorphic-javascript

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

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

由于客户端身份验证存在风险/不安全,因此我将所有经过身份验证的组件/路由包装在前端的授权HOC中,该HOC对服务器进行HTTP调用,以查看用户是否被授权。这是更安全的方法,但在生产中会明显变慢,从而使每个路径渲染延迟了将近2秒钟。

另一种选择是降低安全性,仅在客户端进行身份验证而不进行HTTP调用(即在redux中将isAuth设置为true)。这意味着用户可以绕过受保护的路由,但是由于服务器使用身份验证中间件,因此不会造成太大的损失。

这里有任何建议,经验或意见吗?我应该只是同构并耦合到全栈Javascript吗?

1 个答案:

答案 0 :(得分:0)

您应该在用户登录时在服务器上生成会话cookie或auth令牌。它应具有一定的使用寿命,以免永远失效。然后,您应该将auth令牌存储在客户端上,并在将来的请求中将其用作身份验证标头。您的api应该在以后的所有请求中都要求authtoken作为标头,并检查以确保auth令牌仍然有效。如果有效,则返回常规响应;如果未返回40x,则返回会话超时错误。