【问题标题】:How to force the Google API/OAUTH consent screen?如何强制 Google API/OAUTH 同意屏幕?
【发布时间】:2018-07-17 18:15:48
【问题描述】:

我有一个 Chrome 扩展程序,它在清单中包含 Drive API。安装时,当用户打开 Google Doc 时,background.js 会弹出同意屏幕以获取用户访问其 Google Drive 的权限。

这在安装时工作正常。但是,如果用户从云端硬盘中删除该应用程序,代码不会再次弹出同意屏幕 - 它只是获取一个令牌并尝试云端硬盘仅得到 401 错误。

我原以为如果不批准,auth 调用会弹出同意...

显然,如果用户删除了您的应用,您不应该一直请求许可 - 我现在只是尝试处理最简单的情况。

我的一些用户从未看到同意页面,或者看到它并关闭它...并且不再提示。

清单:

"oauth2": {
        "client_id": "xxxxxxxxxx-smaehlat7c66p1ns6t90ssj3jmlrrecm.apps.googleusercontent.com",
        "scopes": [
            "https://www.googleapis.com/auth/userinfo.email",
        "https://www.googleapis.com/auth/userinfo.profile",
            "https://www.googleapis.com/auth/drive.readonly"
      ]
  },

Background.js:

googleFileID = getIdFromUrl(activeURL);

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

  console.log('In Chrome Identity and obtained token: ' + token);

  $.ajax({
    type: "GET",
    beforeSend: function(request) {
      request.setRequestHeader("Authorization", "Bearer " + token);
    },
    url: "https://www.googleapis.com/drive/v3/files/" + googleFileID + "?fields=owners",
    dataType: 'json',
    processData: true,
    success: function(gDocsMeta1) {
      // DO STUFF

Google API 控制台: 我已经设置了 API 并且可以看到流量,虽然我的流量中有 10% 是错误,我将其归因于上述问题。

我使用 Google Firebase 进行用户身份验证...如果相关的话。虽然我的一些用户选择使用 Google 身份验证来创建帐户,但许多用户使用电子邮件注册。这个问题困扰着这两种类型的注册。

任何帮助表示赞赏!

【问题讨论】:

  • 您是否尝试过使用chrome.identity.removeCachedAuthToken 删除缓存的令牌,然后再次调用chrome.identity.getAuthToken?另一方面,401 错误不会出现在 Google API 控制台中。我发现drive.files.get 方法经常失败。我现在使用drive.files.listq 参数来过滤所需的文件
  • 不,我没有。我陷入了“撤销”作为实现这一目标的一种方式......所以谢谢你。我基本上仍然有一个不再好的令牌...... chrome.identity.removeCachedAuthToken 似乎可以解决问题。以下是对差异的很好讨论:stackoverflow.com/questions/17337107/… 非常感谢!如果你想把它写成答案,我会接受它......

标签: firebase google-chrome-extension google-drive-api google-oauth


【解决方案1】:

当您收到 401 错误作为响应时,您必须在再次调用 chrome.identity.getAuthToken({interactive: true} ...) 之前使用 chrome.identity.removeCachedAuthToken({token:oldToken}) 从缓存中删除无效令牌。

【讨论】:

  • 您是否应该将该令牌存储在 javascript 内存之外的某个位置?它如何刷新(或刷新)?如果您只是将它保存在程序内存中,并且它过期了,那么用户会再次获得身份验证屏幕吗?谢谢!
  • 您可以将其保存在 Javascript 内存中。您必须手动刷新它:当您检测到 401 错误时,调用 removeCachedAuthToken 删除过期令牌,然后调用 getAuthToken({interactive:true}) 获取新令牌。除非用户撤销了权限,否则不会再次显示身份验证屏幕。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-25
  • 2020-05-02
  • 2019-12-07
  • 2019-12-17
  • 2019-03-20
  • 2021-08-25
  • 1970-01-01
相关资源
最近更新 更多