首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从chrome扩展内容脚本发送带有ajax调用的cookie

从chrome扩展内容脚本发送带有ajax调用的cookie
EN

Stack Overflow用户
提问于 2014-04-21 06:50:46
回答 2查看 3.5K关注 0票数 7

我正在为一个提供api的站点做一个铬化扩展,以检查用户是否已登录。api用于GET请求。所以当我被烧掉的时候,它就会产生。

代码语言:javascript
复制
{ status: "ok", authenticated: false}

当我在里面签名的时候

代码语言:javascript
复制
{status : "ok", authenticated: true, id: 123}

这在浏览器、铬扩展(如Postman和高级Rest客户端)上工作得很好。但是当我在我的chrome扩展背景中使用它时,它总是说我不是一个经过身份验证的用户。我发现,我发出的ajax调用不会为域发送cookie,但铬扩展(如Postman或Advanced客户端)确实会发送cookie和XHR请求。

我是否知道如何使ajax与之一起发送cookie。

以下是我从chrome分机发出的ajax调用

代码语言:javascript
复制
$.ajax({
    method:"GET",
    //  xhrFields: {
       //   withCredentials: true
       // },
       // crossDomain: true,
        url:"http://test-staging.herokuapp.com/user/details",
        success: function(result){
          if(result.status=="ok"){
            alert(JSON.stringify(result));
        cb(result.authenticated);
      }
    },
    error: function(err){
      alert("unable to authenticate user "+JSON.stringify(err))
    }
  })

更新1:

我能够从后台脚本中获得域cookie的详细信息。现在,我正在研究如何使用ajax调用发送cookie?

EN

回答 2

Stack Overflow用户

发布于 2020-04-19 17:03:36

如果将内容脚本注入到具有与API原点不同的源(协议、主机和端口组合)的页面:

  • cookie可能会被第三方cookie阻塞特性所阻止。 检查是否启用:chrome://settings/content/cookies。 后台脚本不受其影响(截至Chrome 81)。
  • 设置withCredentials: true (credentials: 'include' for fetch) 或者将原点添加到manifest.jsonmanifest.json部分。 要接收响应,两种情况下都需要正确的CORS头。

更喜欢将API调用移动到后台脚本中,并使用sendMessage将数据传递到内容脚本,以避免第三方cookie阻塞、CORB和CORS限制。如果选择这样做,请将API原点添加到permissions部分的manifest.json中。

票数 4
EN

Stack Overflow用户

发布于 2020-11-01 22:10:32

这是个老生常谈的问题,但这对我来说有什么关系呢?在我的饼干上设置几个旗子。

根据这篇博文:https://www.gmass.co/blog/send-cookie-cross-origin-xmlhttprequest-chrome-extension/

您需要设置samesite: None标志才能正常工作。这似乎是显而易见的,但由于某种原因,在大多数其他资源上没有提到。此外,如果您想要samesite = None,您还需要set-cookie: response上的Secure;标志,这样Chrome就会真正地监听它。

对我来说,也可能是对您来说,这意味着在您的API中乱搞,以便正确设置这些标志。对我来说,这甚至意味着我必须让HTTPS在我正在开发的本地主机服务器上工作,这样chrome就可以相信我的cookie是安全的。此外,正如前面的海报所述,您需要credentials: 'include'

对于任何使用烧瓶的人来说,这看起来像:

代码语言:javascript
复制
app.config['SESSION_COOKIE_SAMESITE'] = "None"
app.config['SESSION_COOKIE_SECURE'] = True 

加上使用命令行上的Https (导出FLASK_RUN_CERT=adhoc)进行调试。

这是一个复杂的,花了我很长时间,但上面的博客链接是一个巨大的帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23192375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档