7

我正在尝试制作一个 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 会话标头与请求一起发送。

如果我在 Inspector 中使用 Javascript 提示发出相同的请求,我可以看到 200 响应,并且我可以看到它正在发送我的会话 cookie。

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

4

2 回答 2

7

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

于 2016-05-20T15:53:41.437 回答
-3

在权限中指定 github 只能访问主机,如果扩展程序/应用程序被恶意软件(源代码)破坏,它可以限制损坏。

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

于 2016-02-22T06:33:35.377 回答