繁体   English   中英

如何做高效的客户端认证?

[英]How to do efficient client-side authentication?

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM