如何使用Chrome扩展程序中的Google端点

时间:2013-11-22 04:00:44

标签: google-app-engine google-chrome google-chrome-extension google-cloud-endpoints

我尝试从Chrome扩展程序连接到我的localhost服务的Google Endpoints API。我设法将OAuth转换为Google Contact API,而不是通过他们的JS客户端,但使用https://apis.google.com/js/client.js?onload=loadF从不调用回调函数。当我尝试手动调用它时,我在控制台中出错: Refused to execute inline event handler because it violates the following Content Security Policy directive。似乎后台工作者没有足够的权限来加载API,但是没有关于它的信息来自控制台。

我的JS代码

var apiRoot='//localhost:8080/_ah/api';

var loadF = function() {
  console.log("api init");
  gapi.client.load('my_api', 'v1', function(){
    console.log("callback");
}, apiRoot);
}

我的文件:

{
  "name": "Linkeer",
  "version": "1.0",
  "description": "Linkeer ",
  "manifest_version": 2,
  "icons": {
    "128": "icon128.png"
  },
  "browser_action": {
    "default_title": "OAuth 2.0",
    "default_icon": "icon128.png",
    "default_popup": "options.html"
  },
  "options_page": "options.html",
  "content_scripts": [
    {
      "matches": ["http://www.google.com/robots.txt*"],
      "js": ["oauth2/oauth2_inject.js"],
      "run_at": "document_start"
    }
  ],
  "permissions": [
    "https://accounts.google.com/o/oauth2/token",
    "http://localhost:8080/_ah/api"
  ],
  "web_accessible_resources" : [
    "oauth2/oauth2.html"
  ],
  "content_security_policy": "script-src 'self' http://localhost https://apis.google.com https://www.googleapis.com; object-src 'self'"

}

3 个答案:

答案 0 :(得分:2)

对于身份验证,我建议使用Chrome Identity API,这样可以实现比目前使用的OAuth2 for Extensions库更清晰,更简单的实现。

我还没有找到一个让JS客户端库在Chrome扩展程序内工作的好方法(虽然暂时没试过)。虽然有open feature request

直接创建XMLHttpRequest的API请求应该很容易,但不使用库。

答案 1 :(得分:1)

您可能需要使用'unsafe-inline'更新您的CSP,这会降低安全性,但可能是Google JS要求的。

"script-src 'self' http://localhost https://apis.google.com https://www.googleapis.com 'unsafe-inline'; object-src 'self'"

答案 2 :(得分:1)

今天,我不相信这是可能的。至少有两个问题:

  • 包含脚本的安全策略是一个重要阻止程序。
  • 对于使用OAuth的应用程序,OAuth流程中的回调似乎从未正常工作。弹出窗口显示,但永远不会将凭据传递回扩展名。