2013-10-24 38 views
3

我正在构建一个带有API后端的Angular应用程序。在多条建议的组合下,我构建了带有令牌认证风格的API。流程大致如下:Angular应用程序中的API令牌安全性

  1. POST登录端点凭据
  2. 验证凭证和授权,然后生成一个新的令牌
  3. 返回令牌客户
  4. 客户端通过HTTP基本访问采用令牌API资源

这一切都很好。根据此令牌创建会话时出现问题。我不认为我应该简单地在客户端中保存cookie中的令牌,但我确实需要在页面刷新之间持续进行会话等。我的Angular应用程序是无状态的,并且通过API调用完全填充。

我正在寻找建议挂在客户端上的这个令牌。我觉得在cookie中保存令牌存在危险,因为cookie可能被盗用,并且只是用来认证其他人,但也许这是不正确的。

在此先感谢您的帮助!

+0

这可能会帮助您http://stackoverflow.com/q/20870386/2015318 – StarsSky

回答

0

因为它是一个Angular应用程序,所以我会假设所有经过身份验证的方法只会服务于ajax请求(您可以告诉服务器只响应ajax),在这种情况下CORS将帮助您。

完全安全的唯一方法是HTTPS,但是这种方法可能比您想象的更安全。请仔细阅读CORS了解更多信息,但本质上这个想法是,服务器只会响应来自同一个域所服务的html页面的ajax请求。

飞行前选项请求经常被发送来验证这一点。浏览器在实际请求之前发送带有Origin头部(页面的起源)的OPTIONS请求。如果源匹配接收它的服务器的域,则允许后续请求。否则,它违反同源政策,将被拒绝。

这可以防止某人嗅出令牌并从服务器未提供服务的页面(如黑客本地计算机上运行的某个页面)发送带令牌的请求。

如果您正在进行信用卡交易或任何超级安全,您应该使用HTTPS。

http://en.wikipedia.org/wiki/Cross-origin_resource_sharing

+0

HTTPS从一开始就已计划好。我很欣赏CORS上的信息;我会执行,然后去。谢谢! – Ben

1

我来识别用户的唯一已知的方法是使用一些象征性的在客户端上。 HTTP是无状态的,无法知道哪个请求来自哪个用户(浏览器)。您无法通过他的IP地址识别用户(许多用户位于路由器后面并共享连接)。你可以尝试浏览器指纹识别,它可以在一些浏览器上工作,但不是全部。

我会推荐使用cookie来将这个令牌存储在客户端。 他们发送到服务器上的每个请求,你可以做一些保护,以防止他们被盗。

要在中间攻击中保护此Cookie不受人影响,您需要使用HTTPS到服务器的加密连接。

设置上的Cookie以下属性:

中HTTPOnly:Cookie无法由JavaScript(XSS保护)进行访问

安全:cookie将只发送通过HTTPS

路径:饼干只会在指定路径上发送,例如/ login

我也会在cookie上定义一个到期日期,所以这个cookie在2天之内是无效的。

但你说得对。如果此令牌被盗,其他人可以以此用户身份登录。

相关问题