Webapp使用rest API进行身份验证

时间:2015-09-18 10:57:01

标签: rest restful-authentication

这是一个相当普遍的问题。想象一下现代的单页" javascript web应用程序,它依赖于AJAX调用其他API进行数据访问。

只有通过提供注册给用户的唯一令牌才能访问其余API。可以通过提供一些端点的用户名和密码来检索(或创建)令牌,例如, /login

现在,一旦用户检索到令牌,我该如何存储它?我知道一些可能的方法,但我不知道什么是安全的。

将其存储在Cookie中:不!导致cookie暴露在文件系统中,很容易受到攻击。

将其存储在浏览器的localstorage中:嗯,可能不是。您可以通过任何页面访问本地存储,因此具有抓取功能的恶意网站可能会选择它。

以javascript格式将其存储在内存中,直到用户离开页面:这应该是相对安全的,我假设。但是如果我想记住访问之间的登录呢?那么我是否必须在服务器上保持会话?如果我需要这个会话,甚至使用令牌的意义何在?不妨在每个请求上重新发送用户名和密码,对吗?

我没想到的任何其他解决方案?人们如何做到这一点?

2 个答案:

答案 0 :(得分:0)

你在几个账户上错了:

  

将其存放在cookie中:不!导致cookie暴露在文件系统中,很容易受到攻击。

使用cookie通常是存储机密的非常可接受的地方。很多人都这样做。我会说风险并不是因为它存储在文件系统上(如果黑客可以访问文件系统,任何类型的保护都会消失),但更多的是它会在每次请求时提交,这打开了大门CSRF。如果你不需要它,你可以避免它,很好!

  

将其存储在浏览器的localstorage中:嗯,可能不是。您可以通过任何页面访问本地存储,因此具有抓取功能的恶意网站可能会选择它。

实际上,任何页面都无法访问它,只能通过您的沙箱(通常是您的域名),因此这具有Cookie的优点,没有缺点。

答案 1 :(得分:0)

我找到了this article,它提供了一个很好的了解内容。

简而言之:Localstorage非常难以保护XSS或代码中的安全错误,因为它可以通过javascript访问。用于存储会话密钥的Cookie并不安静,因为状态存储在服务器上,但是,它们可用于存储JWT等访问令牌,如果cookie为HttpOnly;,则可以使其安全。 Secure;