【问题标题】:Web Page Authentication网页认证
【发布时间】:2020-10-20 03:28:56
【问题描述】:

我正在制作一个仅在 vanilla javascript 上构建网页的辅助项目。 我假装有一个登录页面,所有其他页面都需要身份验证。 我已经有一个登录页面,它在成功登录后获取身份验证令牌。 但是,我在理解/确定下一步要做什么方面遇到了问题。 我的问题如下:

  1. 如何跨多个页面保留令牌?暂时保存在哪里?我看到有人说保存令牌不好,因为它们容易被盗。

  2. 如何在使用令牌登录后将浏览器重定向到主页?据我所见,获取页面有两种方法:让浏览器来做(例如通过更改位置)或使用 ajax。第一种方法不允许附加令牌,第二种方法获取 html,但我无法找到一种方法来将页面“更新”到该 html。我一直在做的是 document.write(new_html) 但开发窗口中的 DOM 在那之后消失了,并且 windows.onload 处理程序设置为没有触发 html。 那么,什么是使用令牌来实现具有身份验证的网站的正确方法。

【问题讨论】:

  • 阅读这篇关于身份验证的文章。第二部分应该回答你的问题。 stackoverflow.com/questions/549/…
  • @silvan-bregy 虽然是一篇非常有用的文章,但它并没有回答我的问题。

标签: javascript authentication jwt access-token


【解决方案1】:

有两种方法可以在浏览器中保存数据:

  1. 本地存储
  2. cookies

就个人而言,到目前为止我遇到的最好的方法是通过服务器设置 cookie,如果你设置了适当的标志,它可以防止用户弄乱它。

就前端而言:

  1. localStorage.setItem('token', 'my-token'); localStorage.getItem('token');
  2. document.cookie = "username=John Smith; expires=Thu, 18 Dec 2013 12:00:00 UTC; path=/";; document.cookie /* 获取 cookie */

【讨论】:

  • 这仅回答了我问题的第一部分,并没有解决本地存储何时优于 cookie,反之亦然。
  • 1) How to keep the token across multiple pages? Save it where temporaly? I saw some people arguing that saving tokens is bad becase they are prone to be stolen.:1.1。使用 cookie 或本地存储。如果您可以访问服务器源代码,最好通过服务器设置 cookie。 1.2.见 1.3。这些人是提供替代方案还是只是为了它而争论?
  • 2) How to redirect the browser to the main page after the login with the token? From what I've seen, there are two ways to obtain a page: let the browser do it (e.g. by changing location) or use ajax. ... 2.1 将令牌存储在 localStorage 或 cookie 中后,您可以安全地关闭浏览器并希望在重新启动后看到您存储的令牌数据,因此您可以选择重定向,但您认为合适在您的特定设置中使用您的特定代码为您的特定项目。
  • 1) 好的。 2)保存令牌后,我想将浏览器重定向到初始页面。这种重定向是如何执行的?说“但是你觉得适合你的特定项目”与什么都不说是一样的,因为我现在仍然不知道如何使用身份验证令牌正确重定向浏览器。如果我正在开发一个休息客户端,那很容易(只需将令牌作为标头发送)。但是,在浏览器中存在我不知道如何解决的挑战(在问题中提出)。你能进一步详细说明那部分吗?
  • 当然。假设我们在 ajax 响应的登录页面上收到了一个令牌,然后我会 localStorage.setItem('token', my-token-var); window.location = '/',因此通过 vanilla javascript 重定向到主页(或任何其他)页面。在主页(和其他所有)页面上,我会运行某种function isLogedIn(){ const token = localStorage.getItem('token'); return token ? true : false }; const logedIn = isLogedIn(); if(logedIn){ console.log('I can now comment as there is a token to pass back to the server with my ajax request, for server to verify my authenticity') }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-12
  • 1970-01-01
  • 1970-01-01
  • 2018-02-24
  • 2013-07-06
  • 2020-06-05
  • 2021-11-20
相关资源
最近更新 更多