我不熟悉Angular开发,想知道什么是存储JWT的正确方法?
我正在使用Auth0身份验证在Angular 6.1单页应用程序中开发的应用程序。
进行身份验证后,Auth0返回一个JWT(访问令牌(jwt)),然后该应用将其存储在本地存储中。然后,客户端应用程序对api(MVC C#)中的[authorize]装饰方法进行后期调用,以验证对api资源的访问。该api正在使用OWIN并进行验证。
尽管访问令牌中包含发行者和受众群体的值,这些值由OWIN中间件检查,但是我担心的是任何人都可以从本地存储访问它并稍后再使用它并通过登录过程吗?
我应该在服务器端的会话cookie中存储“ access_token”吗?
任何指导将不胜感激。
答案 0 :(得分:0)
在服务器端存储“ access_token”是一个坏主意,因为它破坏了无状态JWT Auth的主要目的。这样,您就可以在后端实现任何其他类型的授权,例如数据库中存储的旧的良好会话,而无需JWT。
JWT必须是无状态的,这是真的->有人可以重用您的令牌。但是您可以实施防止这种不安全情况的好技巧。您可以使用内部IP地址生成JWT (将IP地址添加到JWT内容中)。
为此,您可以在授权中间件中实现纯逻辑(某些preAuth挂钩?),该逻辑将验证请求IP是否等于JWT中存储的IP。如果IP地址更改,则可能有人偷了令牌。