OAuth 2.0 使用 Google 客户端 JavaScript,权限被拒绝
OAuth 2.0 using Google Client for JavaScript, getting permission denied
好吧,这就是交易。我试图展示结合 BigQuery 和地图的非常基本的功能 API。所以,显然我需要 OAuth 2.0。
将 Google API 客户端库用于 JavaScript(又名 "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 帐户不同的 Gmail 帐户。 我收到 "permission denied" 错误。
该页面在线托管,已设置凭据以便重定向 URI 为空,并且 JavaScript 来源设置为我希望人们可以访问的 2 个网站。
我错过了什么?我只希望每个拥有 gmail 帐户的人都能够使用我的脚本,从我授予访问权限的那两个网站:(
权限被拒绝错误可能是因为您正在测试的 Google 帐户不是您的 BigQuery 项目的成员(角色:READER)。
这里有两个级别的授权:
(1) 数据集。例如:当前用户是否允许访问此数据集中的 read/update 个表?
(2) 项目。例如:谁的 free/billed 配额将被查询作业占用?
第一个很容易解决——您可以通过 "share dataset" 菜单分配特殊组 "authenticated users" 来制作数据集 public。
第二个更棘手 -- 您不能使用 reader 角色将世界添加到您的项目中。
因此,您不能(直接)向网络公开查询访问权限。
您有几个备选方案:
(1) 如果您只想与少数用户共享此网站,您可以将他们单独添加到您的项目中。
(2) 您可以要求用户提供他们自己的 BigQuery 项目用于计费目的。
这些都不能提供您可能想要的无缝体验,因此您可以考虑更复杂的选项:
(3) 您可以设置一个前端服务来验证您的帐户(或更好的服务帐户 [1])。 Google AppEngine 使这非常容易,但您可以在大多数托管环境中做到这一点。
--
[1] https://cloud.google.com/bigquery/authorization#service-accounts
好吧,这就是交易。我试图展示结合 BigQuery 和地图的非常基本的功能 API。所以,显然我需要 OAuth 2.0。 将 Google API 客户端库用于 JavaScript(又名 "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 帐户不同的 Gmail 帐户。 我收到 "permission denied" 错误。 该页面在线托管,已设置凭据以便重定向 URI 为空,并且 JavaScript 来源设置为我希望人们可以访问的 2 个网站。
我错过了什么?我只希望每个拥有 gmail 帐户的人都能够使用我的脚本,从我授予访问权限的那两个网站:(
权限被拒绝错误可能是因为您正在测试的 Google 帐户不是您的 BigQuery 项目的成员(角色:READER)。
这里有两个级别的授权: (1) 数据集。例如:当前用户是否允许访问此数据集中的 read/update 个表? (2) 项目。例如:谁的 free/billed 配额将被查询作业占用?
第一个很容易解决——您可以通过 "share dataset" 菜单分配特殊组 "authenticated users" 来制作数据集 public。
第二个更棘手 -- 您不能使用 reader 角色将世界添加到您的项目中。
因此,您不能(直接)向网络公开查询访问权限。
您有几个备选方案:
(1) 如果您只想与少数用户共享此网站,您可以将他们单独添加到您的项目中。
(2) 您可以要求用户提供他们自己的 BigQuery 项目用于计费目的。
这些都不能提供您可能想要的无缝体验,因此您可以考虑更复杂的选项:
(3) 您可以设置一个前端服务来验证您的帐户(或更好的服务帐户 [1])。 Google AppEngine 使这非常容易,但您可以在大多数托管环境中做到这一点。
--
[1] https://cloud.google.com/bigquery/authorization#service-accounts