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

时间:2015-05-11 16:53:10

标签: google-chrome google-chrome-extension oauth-2.0

我尝试为Chrome扩展程序提供免费试用期,并且一直关注Chrome documentation,了解如何实现这一目标。

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

  

运行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();
});

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

"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"
    ]
}

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

  1. 客户端ID与使用我的扩展程序ID生成的Google开发者控制台中的值相匹配。
  2. Chrome开发者控制台启用了Chrome网上应用店API(它是唯一启用的API)。
  3. 清单中的密钥与我将扩展名放在网上商店后生成的值相匹配。
  4. 启用交互模式调用getAuthToken会导致同样的错误。
  5. 我将我的代码与this example进行了比较,没有任何东西突然出现在我身上(虽然额外的一双眼睛确认不会受到伤害)。
  6. 如果重要,我在Mac OS X上使用Chrome 42.0.2311.135(64位)。

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

1 个答案:

答案 0 :(得分:12)

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

chrome.identity.getAuthToken({
    'interactive': true
}, function(token) {
    ...
});

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

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