是否需要将Chrome扩展程序发布到Chrome网上应用店才能使用Google的OAuth?

时间:2017-10-01 14:14:41

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

我尝试使用chrome.identity.launchWebAuthFlow方法在Chrome扩展程序中验证Google用户的登录信息,以获取他的电子邮件地址,我的代码是:

的manifest.json

"key": "Key_here",
"oauth2": {
    "client_id": "my_client_id.apps.googleusercontent.com",
    "scopes": [
        "https://www.googleapis.com/auth/userinfo.email"
    ]
}

popup.js

function startOAuth() {
    chrome.runtime.sendMessage({"message": "start_oauth"});
}

$("#login").on("click", startOAuth);

background.js

var manifest = chrome.runtime.getManifest();
var clientId = encodeURIComponent(manifest.oauth2.client_id);
var scopes = encodeURIComponent(manifest.oauth2.scopes.join(' '));
var redirect_uri = chrome.identity.getRedirectURL();

chrome.runtime.onMessage.addListener(
        function (request, sender, sendResponse) {
            if (request.message === "start_oauth") {
                chrome.identity.launchWebAuthFlow({
                    "url": "https://accounts.google.com/o/oauth2/v2/auth?" +
                            $.param({
                                "scope": scopes,
                                "response_type": "token",
                                "client_id": clientId,
                                "redirect_uri": redirect_uri,
                                "prompt": "consent"
                            }),
                    "interactive": true
                }, function (response) {
                    console.log('response: ' + response);
                });
            }
        }
);

但是当我点击弹出图标时,我会进入后台的控制台:

  

回复:未定义

     

运行identity.launchWebAuthFlow时未经检查的runtime.lastError:   无法加载授权页面。

当我在浏览器中打开网址时:

https://accounts.google.com/o/oauth2/v2/auth?scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email&response_type=token&client_id=<my_client_id>&redirect_uri=https%3A%2F%2F<extension-id>.chromiumapp.org%2F&prompt=consent

我收到错误:

  

Error: redirect_uri_mismatch

我已将扩展程序加载为已解压缩的扩展程序,已将chrome://extensions/中名称显示在Application ID下的扩展程序ID {{3} }}

但在这个领域,它说:

  

申请ID

     

应用的Chrome网上应用店网址的最后一部分

这是否意味着我必须将扩展程序发布到Chrome网上应用店才能进行redirect_uri匹配?

注意:

要获取扩展程序的密钥,我将其放入清单并将其称为"Key_here",我将扩展程序的清单上传到 Chrome网上应用店开发人员& #39; s仪表板,作为草稿,并从那里获得public key并放入清单。

现在redirect_uri在Google API控制台和我的解压扩展程序ID中是相同的,我缺少什么?

1 个答案:

答案 0 :(得分:0)

您可以参考此thread。确保您拥有key in your manifest

  

Copy key to your manifest

     

当您在Google OAuth控制台中注册应用程序时,您将提供应用程序的ID,该ID将在令牌请求期间进行检查。因此,在开发过程中获得一致的应用程序ID非常重要。

其他详细信息:How to change chrome packaged app id Or Why do we need key field in the manifest.json?