尝试评估Chrome扩展程序中的免费试用版时,"OAuth2未被授予或撤销"

Eri*_*pie 9 google-chrome google-chrome-extension oauth-2.0

我正在尝试为Chrome扩展程序提供免费试用期,并且一直在关注如何完成此操作的Chrome 文档.

但是,当我的扩展程序加载时,后台脚本会将以下错误记录到控制台:

运行identity.getAuthToken时未经检查的runtime.lastError:未授予或撤消OAuth2.

控制台指向呼叫chrome.identity.getAuthToken作为罪魁祸首.这是我的后台脚本中的相关代码:

var CWS_LICENSE_API_URL = 'https://www.googleapis.com/chromewebstore/v1.1/userlicenses/';

chrome.identity.getAuthToken({
    'interactive': false
}, function(token) {
    console.log('token', token);

    var req = new XMLHttpRequest();
    req.open('GET', CWS_LICENSE_API_URL + chrome.runtime.id);
    req.setRequestHeader('Authorization', 'Bearer ' + token);
    req.onreadystatechange = function() {
        if (req.readyState == 4) {
            var license = JSON.parse(req.responseText);
            console.log('license', license);
        }
    };
    req.send();
});
Run Code Online (Sandbox Code Playgroud)

我的清单是这样设置的(为简洁起见省略了一些部分):

"manifest_version": 2,
"key": "kkkkkkkkkkkkkkk",

"background": {
    "scripts": [
        "background.js"
    ]
},
"permissions": [
    "storage",
    "identity",
    "https://www.googleapis.com/"
],
"oauth2": {
    "client_id": "cccccccccc.apps.googleusercontent.com",
    "scopes": [
        "https://www.googleapis.com/auth/chromewebstore.readonly"
    ]
}
Run Code Online (Sandbox Code Playgroud)

这是我尝试或确认的内容:

  1. 客户端ID与使用我的扩展程序ID生成的Google开发人员控制台中的值相匹配.
  2. Chrome网上应用店API已在Google开发者控制台中启用(它是唯一启用的API).
  3. 清单中的键与我将扩展名放在Web商店后生成的值相匹配.
  4. getAuthToken启用交互模式调用会导致相同的错误.
  5. 我将我的代码与这个例子进行了比较,没有任何东西突然出现在我身上(因为确认一对额外的眼睛不会受到伤害).

如果重要,我在Mac OS X上使用Chrome 42.0.2311.135(64位).

有关导致错误的原因以及我需要更改以使其消失的任何想法,以便我可以查找身份验证令牌和许可证?

Eri*_*pie 15

代码方面,唯一需要的改变是启用交互模式:

chrome.identity.getAuthToken({
    'interactive': true
}, function(token) {
    ...
});
Run Code Online (Sandbox Code Playgroud)

还有一些PEBCAK问题正在发生.即:

  1. 可能需要几秒钟才能显示交互式身份验证页面.这似乎是一个带宽问题.这可能是文档建议在某种用户交互上触发auth请求而不是在扩展首次加载时的部分原因.
  2. 翻转之间的互动false,并true和重装扩展不是功能性的足够的测试.getAuthToken缓存的结果.当我撤销身份验证然后刷新甚至删除并重新添加我的扩展时,相同的令牌会继续返回一段时间.启用交互模式重新启动Chrome是我解决此问题的原因.