在 Chrome 扩展中使用时获取 API 不发送 session cookie

Fetch API not sending session cookies when used inside a Chrome Extension

我正在尝试制作一个 Chrome 扩展,它使用 Fetch API 从 Github 上的合并请求中抓取一些细节,然后将它们显示在其他地方。当我尝试将它与 Github 上的 non-public 存储库一起使用时,我 运行 遇到了一些问题。我认为这与 CSRF 保护以及管理 Chrome 扩展程序访问 session 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 session header 请求。

如果我在 Inspector 中使用 Javascript 提示发出完全相同的请求,我可以看到 200 响应,而且我可以看到它 正在 发送我的session 饼干。

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

在权限中指定 github 仅授予对主机的访问权限,如果 extension/app 被恶意软件 (source) 破坏,它可以限制损害。

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

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