代码之家  ›  专栏  ›  技术社区  ›  hyit

OAuth 2.0使用Google Client for JavaScript,获取权限被拒绝

  •  0
  • hyit  · 技术社区  · 11 年前

    Hokay,这是交易。我试图展示结合BigQuery和MapsAPI的基本功能。所以,显然我需要OAuth 2.0。 使用Google API Client Library for JavaScript(又名“gap”),我使用了以下代码。

    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");
        });
    }
    

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

    我错过了什么?我只希望每个拥有gmail帐户的人都能使用我的脚本,从我访问过的两个网站:(

    1 回复  |  直到 11 年前
        1
  •  1
  •   Adam Lydick    11 年前

    权限被拒绝错误很可能是因为您正在测试的Google帐户不是BigQuery项目的成员(角色:READER)。

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

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

    第二个更棘手——你不能用读者的角色将世界添加到你的项目中。

    因此,您不能(直接)公开对web的查询访问。

    您有几个可选选项:

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

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

    这两种方法都不能提供您可能想要的无缝体验,因此您可以考虑更复杂的选择:

    (3) 您可以设置一个前端服务,将其认证为您的帐户(或更好的服务帐户[1])。GoogleAppEngine使这非常简单,但您可以在大多数托管环境中做到这一点。

    --

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