javascript - OAuth 2.0 使用 Google Client for JavaScript,权限被拒绝

标签 javascript oauth google-bigquery

霍凯,事情就这样了。我试图展示结合 BigQuery 和 Maps API 的非常基本的功能。所以,显然我需要 OAuth 2.0。 使用适用于 JavaScript 的 Google API 客户端库(又名“gapi”),我使用以下代码。

var project_id = '***';
var client_id = '***';
var config = {
    'client_id': client_id,
    'scope': 'https://www.googleapis.com/auth/bigquery',
    'immediate': true
};
function auth() {
    gapi.client.setApiKey('***');
    gapi.auth.authorize(config, function() {
        gapi.client.load("bigquery", "v2");
    });
}

这一切都很好,直到我尝试使用与我打开 BigQuery 项目所用的不同的 Gmail 帐户。 我收到“权限被拒绝”错误。 该页面在线托管,凭据已设置为重定向 URI 为空,并且 JavaScript 来源设置为我希望人们可以访问的 2 个网站。

我错过了什么?我只是希望拥有 gmail 帐户的每个人都能够从我授予访问权限的这 2 个网站使用我的脚本:(

最佳答案

权限被拒绝错误可能是因为您测试时使用的 Google 帐户不是您的 BigQuery 项目的成员( Angular 色:READER)。

这里有两个级别的授权: (1)数据集。例如:当前用户是否允许读取/更新此数据集中的表? (二)项目。例如:查询作业将消耗谁的免费/计费配额?

第一个很容易解决 - 您可以通过“共享数据集”菜单分配特殊组“经过身份验证的用户”来公开数据集。

第二个更棘手 - 您无法使用读者 Angular 色将世界添加到您的项目中。

因此,您无法(直接)向网络公开查询访问权限。

您有几个替代选项:

(1) 如果您只想与少数用户共享此网站,您可以将他们单独添加到您的项目中。

(2) 您可以要求用户提供自己的 BigQuery 项目以用于计费目的。

这些都无法提供您可能想要的无缝体验,因此您可以考虑更复杂的选项:

(3) 您可以设置一个前端服务来验证您的帐户(或者更好 - 服务帐户[1])。 Google AppEngine 使这变得非常简单,但您可以在大多数托管环境中做到这一点。

--

[1] https://cloud.google.com/bigquery/authorization#service-accounts

关于javascript - OAuth 2.0 使用 Google Client for JavaScript,权限被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28347800/

相关文章:

javascript - JavaScript 中的函数式编程 - 事件

curl - Google 日历 "Unauthorized WebHook callback channel"错误

android - OAuth2 回调在某些设备的浏览器内启动 Activity

sql - 如何最大限度地降低 BigQuery 中每次 SQL 查询执行的成本

javascript - VueJS 错误 "Uncaught TypeError: this.sendDrag is not a function"in mounted ()

javascript - 如何使用 javascript 访问两个 html 表单内的对象?

oauth - 如何使用 sencha touch 使用linkedin API

sql - 查询执行错误期间超出资源,Google BigQuery

google-analytics - BigQuery 错误 : Cannot query the cross product of repeated fields

javascript - 如何使用参数调用回调函数