霍凯,事情就这样了。我试图展示结合 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/