Google chrome extension 为什么在Chrome扩展中获取oAUTH2令牌失败?

Google chrome extension 为什么在Chrome扩展中获取oAUTH2令牌失败?,google-chrome-extension,google-oauth,Google Chrome Extension,Google Oauth,我有一个Chrome扩展,需要对用户进行身份验证。一旦通过身份验证,我会将该用户的电子邮件发送到运行在Docker中的服务器,然后登录。我拿不到代币。代码如下: chrome.identity.getAuthToken({ 'interactive': true }, function(token) { if (chrome.runtime.lastError) { currentSessionAccessToken=t

我有一个Chrome扩展,需要对用户进行身份验证。一旦通过身份验证,我会将该用户的电子邮件发送到运行在Docker中的服务器,然后登录。我拿不到代币。代码如下:

         chrome.identity.getAuthToken({ 'interactive': true  }, function(token) {
            if (chrome.runtime.lastError) {
                currentSessionAccessToken=token;
                        alert(chrome.runtime.lastError.message);
                //alert("you need to have a gmail account");    //ubuntu
              return;
          }
          

          currentSessionAccessToken=token;
          var x = new XMLHttpRequest();
          x.open('GET', 'https://www.googleapis.com/oauth2/v2/userinfo?alt=json&access_token=' + token);
          
          x.onload = function() {
              if (x.readyState=200)
              {
 
              var data=this.responseText;
              jsonResponse = JSON.parse(data);
              photo = jsonResponse.picture;
              szName=jsonResponse.name;
              email=jsonResponse.email;
                x.abort();  //done so get rid of it 
                
              send_to_backend(request, sender, sendResponse);
              };
          }  
              
              
          x.send();
          
           }

问题是我没有取回访问令牌。后端(此时)也在我的笔记本电脑(localhost)上,但在docker容器中。我没有本地主机的SSL证书,我想知道这是否是问题所在?我从未获得过令牌,因此我从未使用XMLHttpRequest发送它,因此我从未获得ReadyState=200。你知道怎么回事吗?

你是否为谷歌OAuth API访问注册了你的应用程序,并在清单中指定了OAuth字段

从用户身份验证上的:

将密钥复制到您的清单

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

要保持应用程序ID不变,需要将安装的manifest.json中的密钥复制到源清单中。这不是最优雅的任务,但它是如何进行的:

  • 转到您的用户数据目录。MacOs上的示例:~/Library/Application\Support/Google/Chrome/Default/Extensions
  • 列出已安装的应用程序和扩展,并将“应用程序和扩展管理”页面上的应用程序ID与此处的相同ID匹配
  • 转到已安装的应用程序目录(这将是应用程序ID中的版本)。打开已安装的manifest.json(pico是一种快速打开文件的方法)
  • 复制已安装manifest.json中的“密钥”,并将其粘贴到应用程序的源清单文件中
  • 获取您的OAuth2客户端ID

    您需要在Google API控制台中注册应用程序以获取客户端ID:

  • 使用用于将应用程序上载到Chrome Web应用商店的相同Google帐户登录到Google API控制台
  • 通过展开左上角的下拉菜单并选择“创建”按钮来创建新项目。。。菜单项
  • 创建并命名后,转到“服务”导航菜单项,打开应用程序所需的任何谷歌服务
  • 转到“API访问”导航菜单项并单击创建OAuth 2.0客户端ID。。。蓝色按钮
  • 输入请求的品牌信息,选择已安装的应用程序类型
  • 选择Chrome应用程序并输入您的应用程序ID(与应用程序和扩展管理页面中显示的ID相同)
  • 注册应用程序后,您需要在清单中添加以下内容:

    "oauth2": {
        "client_id": "YOUR_CLIENT_ID",
        "scopes": ["scope1", ...]
    }
    

    您是否为Google OAuth API访问注册了应用程序,并在清单中指定了OAuth字段

    从用户身份验证上的:

    将密钥复制到您的清单

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

    要保持应用程序ID不变,需要将安装的manifest.json中的密钥复制到源清单中。这不是最优雅的任务,但它是如何进行的:

  • 转到您的用户数据目录。MacOs上的示例:~/Library/Application\Support/Google/Chrome/Default/Extensions
  • 列出已安装的应用程序和扩展,并将“应用程序和扩展管理”页面上的应用程序ID与此处的相同ID匹配
  • 转到已安装的应用程序目录(这将是应用程序ID中的版本)。打开已安装的manifest.json(pico是一种快速打开文件的方法)
  • 复制已安装manifest.json中的“密钥”,并将其粘贴到应用程序的源清单文件中
  • 获取您的OAuth2客户端ID

    您需要在Google API控制台中注册应用程序以获取客户端ID:

  • 使用用于将应用程序上载到Chrome Web应用商店的相同Google帐户登录到Google API控制台
  • 通过展开左上角的下拉菜单并选择“创建”按钮来创建新项目。。。菜单项
  • 创建并命名后,转到“服务”导航菜单项,打开应用程序所需的任何谷歌服务
  • 转到“API访问”导航菜单项并单击创建OAuth 2.0客户端ID。。。蓝色按钮
  • 输入请求的品牌信息,选择已安装的应用程序类型
  • 选择Chrome应用程序并输入您的应用程序ID(与应用程序和扩展管理页面中显示的ID相同)
  • 注册应用程序后,您需要在清单中添加以下内容:

    "oauth2": {
        "client_id": "YOUR_CLIENT_ID",
        "scopes": ["scope1", ...]
    }
    

    事实证明,为了让“身份”发挥作用,你必须发布到谷歌网站商店。我之所以不这么做,是因为一个网站经常需要几周的时间才能被审查。我过去也有过这种经历。我还没有真正确定将要使用的新URL,并希望在我这么做之前让系统正常工作。既然我提交了审查,我想我还有一些时间,并且将“虚构”继续开发工作所需的步骤(即身份验证)。感谢迈卡指出手册。这让我意识到,如果没有谷歌的批准,就无法让“身份”生效。

    事实证明,为了让“身份”生效,你必须发布到谷歌网站商店。我之所以不这么做,是因为一个网站经常需要几周的时间才能被审查。我过去也有过这种经历。我还没有真正确定将要使用的新URL,并希望在我这么做之前让系统正常工作。既然我提交了审查,我想我还有一些时间,并且将“虚构”继续开发工作所需的步骤(即身份验证)。感谢迈卡指出手册。这让我意识到,如果没有谷歌的批准,“身份”是无法工作的。