在Chrome扩展程序中使用时,获取API不会发送会话Cookie

时间:2016-02-21 21:23:20

标签: google-chrome-extension xmlhttprequest cors csrf fetch-api

我尝试制作Chrome扩展程序,使用Fetch API从Github上的Pull Requests中删除一些细节,然后将其显示在其他位置。当我尝试在Github上使用非公共存储库时,我遇到了一些问题。我认为这与CSRF保护以及管理Chrome扩展程序可以访问会话Cookie的规则有关。

我的扩展程序manifest.json中有以下内容:

"content_scripts": [{
    "matches": [
        "*://github.com/*/*/pulls"
    ],
    "js": ["script/underscore-1.8.3.min.js", "script/content.js"]
}],
"permissions": [
    "tabs",
    "activeTab",
    "*://github.com/*",
    "webNavigation"
]

但是当我从script/content.js

中运行以下内容时
fetch('/redacted/redacted/pull/4549', {credentials: 'same-origin'}).then((response) => {
    return response.text();
}).then((text) => {
    // do cool stuff
})

这会从Github产生404响应。使用Chrome Inspector的网络标签检查此请求,我发现它没有向请求发送我的GitHub会话标头。

如果我使用检查器中的Javascript提示发出相同的请求,我可以看到200响应,我可以看到它 发送我的会话cookie。

我的理解是在我的manifest.json中指定Github域意味着我的扩展可以在我的内容脚本中访问我的会话数据,这是不正确的?我应该怎么做才能对这个受保护的内容提出有效请求?

2 个答案:

答案 0 :(得分:5)

根据Chrome blog,要包含Cookie,您需要credentials: 'include'而不是credentials: 'same-origin'

答案 1 :(得分:-1)

在权限中指定github只能访问主机,如果扩展程序/应用程序受到恶意软件(source)的攻击,则可以限制主机。

content script documentation中未指出会话数据可以在内容脚本中检索,只能在DOM中检索。我认为如果您在正在创建的chrome扩展项目中使用并合并官方Github API会更好。