为了使用JWT保护REST API,根据一些材料(如本指南和此问题),JWT可以存储在localStorage或Cookies中.根据我的理解:
因此,基于上述前提 - 最好将JWT存储在Cookies中.在每次向服务器发出请求时,将从Cookie中读取JWT并使用承载方案添加到授权标头中.然后,服务器可以验证请求标头中的JWT(而不是从cookie中读取它).
我的理解是否正确?如果是这样,上述方法是否有任何安全问题?或者实际上我们可以在第一时间使用localStorage逃脱?
使用REST API作为后端,由JWT授权反应前端,但如何处理会话?例如,登录后我从REST获取JWT令牌,如果我将其保存到localStorage,我很容易受到XSS的攻击,如果我将其保存到Cookies,只有在没有设置HttpOnly时才会出现同样的问题,但是反应无法读取HttpOnly Cookies(我需要)读取cookie以从中获取JWT,并将此JWT用于休息请求),我也没有提到CSRF问题,如果使用REST作为后端,则不能使用CSRF令牌.
因此,使用REST的React似乎是糟糕的解决方案,我需要重新思考我的架构,如何成为?是否有可能为您的用户提供安全的响应应用程序,哪些业务逻辑在REST API端处理,而不必担心丢失数据?
更新:
据我所知,有可能这样做:
我有缺乏理论知识在这里,但看起来逻辑和相当安全的,但我仍然需要回答我的问题,并批准该"工作流"的.
我有一个api使用jwt的authencation.我正在使用这个api的vuejs应用程序.我正在尝试使用应用程序在应用程序中显示图像
<img src="my/api/link" />
Run Code Online (Sandbox Code Playgroud)
但是api期望Authorization标题jwt token在里面.
我可以像这样在浏览器请求中添加标题(这里几个问题的回答让我相信它不可能)?
有没有办法(使用js)或我应该改变api自己?
我在域上有一个客户端应用程序,在域上client-domain.com有一个服务器端应用程序server-domain.com.服务器端有一个API.客户端应用程序将AJAX请求发送到服务器端应用程序.我使用基于令牌的身份验证,因此客户端应用程序在每个AJAX请求的头文件中发送令牌,例如:"授权:承载{某些令牌}".当我需要获取或发布一些数据时,它可以很好地处理AJAX请求.
但服务器端API也保留文件.例如图像.文件是私有的,只有经过身份验证的用户才能获取它们.我需要在<img>标签的客户端显示这些图像.我无法使用它们,<img src="http://server-domain.com/path/to/image">因为在这种情况下,浏览器不会向服务器端发送Authorization标头.
采用的解决方案是什么?客户端应用程序如何从服务器端API加载图像?
我目前正在开发一个 MERN 堆栈应用程序,我使用的身份验证是 JWT 并将其保存在我的 cookie 中。这就是我在用户登录后发送 cookie 的方式。
res
.cookie("token", token, {
httpOnly: true,
secure: true,
sameSite: "none",
})
.send();
Run Code Online (Sandbox Code Playgroud)
我通过在后端获取“令牌”cookie 来登录用户。然而,我用这个应用程序实现了 Redux,每次刷新页面时,它都会自动注销。我想要的是在我的前端(React)中检测浏览器中的“令牌”cookie,但我无法获取它。我尝试过使用 npm js-cookie 但仍然无法得到它。有没有办法获得“令牌”cookie?或者根据我读过的内容使用 redux-persist ?请帮忙,谢谢。
我几乎没有开始阅读 JWT,我相信我了解 JWT 令牌是什么。我对 SESSIONS 也相当熟悉。我相信我了解每个人的优点和缺点。但是,有几个部分让我感到困惑。
当请求受保护的资源时,您需要在每个请求上发送 jwt,而不是将会话存储在服务器上。但:
1) 你如何存储你的 JWT 令牌以及在哪里。从我读到的内容中,我了解到您将身份验证请求发送到服务器,如果您成功通过身份验证,服务器会向您发送 JWT 令牌。那你怎么办?,你是否将 JWT 存储在 cookie 中,就像我在某些网站上读到的那样?如果是这样,你怎么做(使用 php,使用 javascript)。以及如何阅读。
2)使用会话时,或多或少您只是检查是否有会话来检查用户是否登录。使用JWT时如何完成此操作。
我也在一些页面上看到了这个:
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
Run Code Online (Sandbox Code Playgroud)
这与此有什么关系(如果有关系的话)
您好stackoverflow社区!
我们使用nuxts.js框架构建了一个SPA应用程序,并且到了从后端API服务存储JWT令牌的最安全方式。
我们有两个带有httpOnly标志和localStorage标志的cookie。我阅读了大量有关这两种选择的比较的文章,尽管一半的开发人员支持cookie,一半的开发人员支持本地存储。
以我的观点,cookie似乎比localStorage在客户端存储JWT的方法更安全,但我想知道是否还有比上述选项更安全的方法。
所以我想了些事。Nuxt.js框架为我们提供了存储环境变量的机会。将JWT令牌存储为环境变量是否更安全,还是与上述选项完全一样,甚至更糟?
先感谢您!
我正在使用 Django 和 Angular 构建一个应用程序。目前,我正在本地存储上存储后端发出的 JWT。但是,我担心 XSS 攻击。我应该使用仅 HTTP 的 cookie 来存储令牌吗?我还考虑将令牌存储在我的身份验证服务类中的变量字段中。但我不完全确定 Angular 是否在整个应用程序中共享该服务。我的身份验证服务只有一个实例吗?
我正在将 Firebase Auth 用于涉及金融交易的网络应用程序。因此,安全性对我的应用程序来说是最重要的。根据这个 doc,Firebase 可以通过将其存储在某个地方来跨多个会话保留其令牌。它没有提到它对 XSS 的安全性。当然,我可以假设它是安全的,因为它是谷歌,但我想了解更多。
我们都读过一些文章,指出 localStorage 存储身份验证是不安全的,而 cookie + csrf 令牌 + jwt + httpOnly 是处理浏览器身份验证的更安全的方式。
Firebase 如何存储其令牌?它使用 localStorage 或 cookie,还是两者的组合?
在处理基于浏览器的应用程序时,关于安全存储 JWT 令牌的主题已经提出了很多问题。共识似乎是应该使用仅限 http 的安全 cookie 。然而,当涉及短期访问令牌和长期刷新令牌时,存储 JWT 令牌似乎存在许多变化。
我已经确定了以下变化:
1. 将 JWT 访问令牌和刷新令牌存储在仅限 http 的安全 cookie 中
优点:
缺点:
这里的最佳答案建议添加 CSRF 令牌:/sf/answers/2617760071/
2. 将 JWT 访问令牌存储在内存中,并在仅限 http 的安全 cookie 中刷新令牌
优点:
缺点:
在这里推荐,但收到的票数比顶帖少很多: /sf/answers/4451576811/
3. 将刷新令牌存储在内存中,并将 JWT 访问令牌存储在仅限 http 的安全 cookie 中
优点:
缺点: