【问题标题】:why is getting oAUTH2 token failing in the Chrome Extension?为什么在 Chrome 扩展程序中获取 oAUTH2 令牌失败?
【发布时间】:2020-07-30 02:03:28
【问题描述】:

我有一个需要对用户进行身份验证的 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();
          
           }

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

【问题讨论】:

    标签: google-chrome-extension google-oauth


    【解决方案1】:

    您是否为您的应用注册了 Google OAuth API 访问权限并在清单中指定了 oauth 字段?

    来自documentation 用户身份验证:

    将密钥复制到清单

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

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

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

    获取您的 OAuth2 客户端 ID

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

    1. 使用用于将您的应用上传到 Chrome 网上应用店的同一 Google 帐户登录到 Google API 控制台。
    2. 通过展开左上角的下拉菜单并选择“创建...”菜单项来创建一个新项目。
    3. 创建并命名后,转到“服务”导航菜单项并打开您的应用所需的任何 Google 服务。
    4. 转到“API 访问”导航菜单项,然后单击“创建 OAuth 2.0 客户端 ID...”蓝色按钮。
    5. 输入要求的品牌信息,选择已安装的应用程序类型。
    6. 选择 Chrome 应用程序并输入您的应用程序 ID(与应用程序和扩展程序管理页面中显示的 ID 相同)。

    注册应用后,您需要在清单中添加类似的内容:

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

    【讨论】:

    • 感谢您的回答和我试图完全遵循的指示。请参阅2.列出已安装的应用和扩展,并将您在应用和扩展管理页面上的应用ID与此处的相同ID匹配。我有两张图片要发布。第一个显示来自我的应用和扩展管理页面的“应用”ID(请参阅,它只是说 ID,而不是应用 ID)。第二个显示 Google-chrome/default/extensions 列表。请注意,ID lamacgn... 不会出现在列表中!如果匹配的“已安装目录”不存在,我该如何使用这些说明?告诉我。
    • 好的。我在已安装的扩展中删除了 lamacgn 扩展并重新添加了它。该目录仍然没有出现在 /default/extensions/ 中。这些指令根本不起作用。
    • 我真的不确定,不久前我在一台 Ubuntu 机器上完成了这个过程,它工作正常。也许尝试在您的设备上重新安装 Chrome?
    • 刚刚在windows PC上检查过,它就在那里。在我的 ubuntu 电脑上,我有两个扩展,一个在 windows PC 上,一个是我正在尝试开发的新扩展。旧的应用程序目录看起来很好。它只是缺少的新的。也许它没有在 Google App Store 中正确注册?我不想在上面愚弄它,因为有时可能需要数周才能将其重新注册在那里。但这可能是整个代币问题的根源?
    • 我无法对您发表的其他评论发表评论,但根据我的经验,我的延期通常在不到一天的时间内就获得了商店的批准。不过,我听说其他人需要更长的时间。
    【解决方案2】:

    事实证明,为了让“身份”发挥作用,您必须将其发布到 Google WebStore。我不这样做的原因是,通常需要数周时间才能对网站进行审核。我过去有过这样的经历。在我这样做之前,我还没有真正确定将要使用的新 URL 并想让系统正常工作。既然我提交了审查,我想我有一些时间,并将“虚设”所需的步骤(即身份验证)以继续开发工作。感谢 Micah 指出手册。这让我意识到,如果没有获得 Google 的批准,就无法让“身份”发挥作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-28
      • 2019-11-29
      • 2023-03-10
      • 2016-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多