当前位置: 首页 > 面试题库 >

将JWT保存在基于浏览器的应用程序中的位置以及如何使用它

厉文栋
2023-03-14
问题内容

我正在尝试在身份验证系统中实现JWT,但我有几个问题。要存储令牌,我可以使用Cookie,但也可以使用localStoragesessionStorage

哪个是最佳选择?

我读过,JWT保护站点免受CSRF的侵害。但是,假设我将JWT令牌保存在cookie存储中,我无法想象它将如何工作。

那么如何保护它免受CSRF的侵害?

更新1
我看到了一些用法示例,如下所示:

curl -v -X POST -H "Authorization: Basic VE01enNFem9FZG9NRERjVEJjbXRBcWJGdTBFYTpYUU9URExINlBBOHJvUHJfSktrTHhUSTNseGNh"

当我从浏览器向服务器发出请求时,该如何实现?我还看到有人在URL中实现了令牌:

http://exmple.com?jwt=token

如果我要通过AJAX发出请求,则可以将header设置为jwt: [token],然后可以从header中读取令牌。

更新2

我安装了高级REST客户端Google
Chrome扩展程序,并且能够将令牌作为自定义标头传递。向服务器发出GET请求时是否可以通过Javascript设置此标头数据?


问题答案:

[编辑]这个答案是可以接受的,但是若昂·安杰洛的回答更为详尽,应予以考虑。
不过,有一个说法是,由于自从2016年11月以来安全惯例不断发展,因此应该实施方案2来支持方案1。

如果要存储它们,则应使用localStorage或sessionStorage(如果可用)或cookie。您还应该使用Authorization标头,但要使用Basicer而不是Basic方案:

curl -v -X POST -H "Authorization: Bearer YOUR_JWT_HERE"

使用JS,您可以使用以下代码:

<script type='text/javascript'>
// define vars
var url = 'https://...';

// ajax call
$.ajax({
    url: url,
    dataType : 'jsonp',
    beforeSend : function(xhr) {
      // set header if JWT is set
      if ($window.sessionStorage.token) {
          xhr.setRequestHeader("Authorization", "Bearer " +  $window.sessionStorage.token);
      }

    },
    error : function() {
      // error handler
    },
    success: function(data) {
        // success handler
    }
});
</script>


 类似资料:
  • 我试图在我的认证系统中实现JWT,我有几个问题。要存储令牌,我可以使用Cookie,但也可以使用或。 哪一个是最好的选择? 我已经读到JWT保护网站不受CSRF的影响。但是,如果我将JWT令牌保存在cookie存储中,我无法想象这将如何工作。 那么它将如何防止CSRF? 更新1 我看到一些使用示例,如下所示: 当我从浏览器向服务器发出请求时,如何实现这一点?我还看到一些人在URL中实现了令牌: 如

  • 我知道基于cookie的身份验证。可以应用SSL和HttpOnly标志来保护基于Cookie的身份验证免受MITM和XSS的攻击。然而,需要采取更多的特别措施,以保护它免受CSRF的影响。他们只是有点复杂。(参考) 最近,我发现JSON Web令牌(JWT)作为一种身份验证解决方案非常热门。我知道JWT的编码、解码和验证。但是,我不明白为什么有些网站/教程告诉如果使用JWT就不需要CSRF保护。我

  • 问题内容: 如何在基于Java的桌面应用程序中嵌入浏览器?我是否可以直接与嵌入式浏览器通信(而不是通过本地主机)……例如加载html文本,捕获onclick事件,获取表单值? 谢谢 问题答案: 查看Eclipse,它具有一个嵌入式浏览器,用户可以对其进行配置(它们支持多种浏览器)。 即使您通过AWT_SWT桥使用基于AWT的应用程序,也可能会嵌入他们的浏览器。 此文章可以帮助您开始。

  • 我第一次使用JSON Web令牌(JWT)。我正在制作一个节点。js应用程序。我想使用JWT进行身份验证。根据文档,我将JSON令牌返回到前端。 但是我不知道如何将这个JSON令牌保存到我的浏览器头中,这样它就不会丢失,并随头一起再次发送到后端。如何将它保存在我的浏览器存储中,并在每次向后端发送请求时将其添加到请求头中?

  • 所以目前我有一个托管在亚马逊S3上的反应应用程序,它是通过云前沿CDN提供的,但是,每次我发布新的产品版本,最终用户都必须深度刷新整个页面(因为上一个版本的内容仍然保留在浏览器缓存中)。有没有什么我只能在发布产品版本时使CDN缓存和浏览器缓存无效。顺便说一句,我使用GitLab ci。

  • 问题内容: 我们可以从javascript获取浏览器名称,但是有没有办法相应地更改css。我的意思是一些css文件类,因为我不想链接另一个css文件,我想在上面写样式 问题答案: 有两种方法: 客户端:您需要使用Javascript来检测浏览器并导入适当的CSS样式。看一下这篇文章。(链接不再可用) 服务器端:您需要检测]用户代理并提供适当的HTML。这是为此的PHP源链接。