2015-09-25 40 views
4

我的基于AngularJS的应用程序旨在使用localStorage来保存身份验证后从后端返回的JWT身份验证令牌。对于进入后端的每个请求(POST,GET等),应用程序都使用拦截器将标记附加到后端。这个过程一直很好,直到我遇到了以下问题:Angular中的身份验证:处理新标签页或新浏览器窗口

  1. 我的经理不允许使用localStorage保存的用户名和智威汤逊身份验证令牌,因为他们会在浏览器坚持,除非他/她故意注销的应用程序(它从localStorage清除缓存)。如果用户关闭浏览器而不注销,则缓存将保留在localStorage中。

  2. 因为问题1,我切换到使用sessionStorage来存储用户名和JWT身份验证令牌来代替,不过,这将导致更多的问题,当用户右击某个链接在新选项卡或新浏览器中打开应用程序窗口。在新的选项卡/窗口中,应用程序无法看到用户已通过身份验证,而到后端的请求被拒绝(401 error),因为应用程序无法在新选项卡/窗口的sessionStorage中找到JWT身份验证令牌。

  3. 如果我将用户名和JWT授权令牌作为变量缓存在JavaScript代码中,那么如果用户刷新浏览器,应用程序将丢失它们。

所以这些都是我在使用JWT授权令牌时的两难处境。有没有更好的解决方案来处理需求:不使用localStorage,应用程序应该在新选项卡或新浏览器窗口中继续使用相同的身份验证JWT令牌。谢谢!

+0

也许是饼干? – CollinD

+0

在这个https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage/ –

+0

有一个屠夫我有完全相同的问题。 @TonyGW你找到了一个好的解决方案? – goflo

回答

-1

这是更多的角度/服务器设置的设计缺陷,然后是一个简单的令牌问题。

通常,当用户在新窗口/选项卡中打开一个链接来启动一个干净的新会话时。该URL会指向需要身份验证的内容,并且由于这是新会话,角度应用程序应该尝试恢复它。或者用户使用登录,请记住我已启用,否则系统将提示您输入用户名/密码。在成功验证用户身份之后,URL应该通过重定向进行恢复。

所以它的工作原理是这样的。

http://example.com/page1 <-- user uses ctrl+click to open new tab 
http://example.com/page2 <-- user doesn't have session 
http://example.com/signin?url=/page2 <-- redirect to sign in with return path 
http://example.com/page2 <-- user session restored after sign in 

的登入一步可以跳过机智的记得我功能被用户启用。

将会话令牌存储在localStorage中与没有会话相同。由于在浏览器重新启动时令牌将被恢复。那有什么安全性?

+0

所以你建议继续使用localStorage?这就是我一直在想的,但经理不喜欢持久性。 – TonyGW

+0

@TonyGW不,我是说**不是**将令牌放在localStorage中。 – cgTag

相关问题