1

让我们假设一个客户端在索引页面上打开您的nuxt.js网站。从那里,他们进行身份验证(您为此目的使用了@nuxtjs/auth-next )。然后他们移动到只有经过身份验证的用户才能看到的安全页面。这个安全页面是一个 .vue 文件,位于您的“pages”文件夹中,带有middleware: ["auth"].

现在,这个页面真的安全吗? 我的意思是,恶意用户不能在没有经过身份验证的情况下修改页面并访问它吗?因为这种场景中的“安全”只在客户端实现对吗?[编辑]

4

2 回答 2

2

你的应用程序最后是一个 SPA,如果你想绕过一个带有安全检查的中间件,你可以禁用页面上的 JS。但是,由于没有直接生成内容,您将看不到任何内容,因为它不在这里(作为静态文件)。

如果您的应用程序是同构的(基本上有一个ssr: true),则 auth 模块仍将禁用对这些页面的访问(您可以仔细检查)。

最后,在以下情况下收到关键信息:

  • 你确实有一个有效的 JWT 令牌(登录后)
  • 您向后端提交 HTTP 查询
  • 后端承认它并且令牌是有效的
  • 后端通过 HTTP 响应为您提供敏感信息

最后,您的客户端代码不需要是安全的。如果有人以某种方式入侵了您的客户端状态并到达敏感页面,他仍然没有有效的 JWT 令牌,因为验证仍然在后端进行。
只有在将正确的凭证发送到后端并让后端验证这些凭证时才能生成的凭证。

于 2021-11-12T15:49:12.437 回答
0

现在,这个页面真的安全吗?

如果客户端提供了有效的访问令牌,则从请求中提供受保护的内容。受保护的内容在运行时提供。

因为这种场景中的“安全”只在客户端实现,对吧?

安全性不仅在客户端实现。前提是:访问令牌已通过身份验证服务器的身份验证流程安全获得。如果这听起来不清楚,我建议阅读有关身份验证流程的更多信息。Auth0 对不同的流程有一些很好的文档。 https://auth0.com/docs/authorization/flows

那么,仅向经过身份验证的用户显示复杂页面的最佳方式是什么?

内容在运行时提供。服务器端或客户端。这里有一些 Nuxt 的设置指南。这是我从列表中找到的第一个 (Auth0)。 https://auth.nuxtjs.org/providers/auth0

我不知道这些指南的更新程度,但身份验证服务提供商往往会自己更新指南。

于 2021-11-12T16:55:57.987 回答