Google Cloud Datastore . net客户端API拒绝403权限

本文关键字:拒绝 权限 API 客户端 Cloud Datastore net Google | 更新日期: 2023-09-27 18:18:11

使用新的Google Cloud Datastore v1beta客户端库,我得到

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "PERMISSION_DENIED",
    "message": "Unauthorized."
   }
  ],
  "code": 403,
  "message": "Unauthorized."
 }
}

的任何请求。我创建了一个应用引擎应用,添加了云数据存储API,配置了一个服务帐户,我正在使用它来验证我的请求。

[TestMethod]
public void BasicBlindWrite()
{
    var service = new DatastoreService(new BaseClientService.Initializer() { Authenticator = CreateAuthenticator() });
    var request = new GoogleData.BlindWriteRequest();
    var entity = new GoogleData.Entity();
    entity.Key = new GoogleData.Key();
    entity.Key.Path = new List<KeyPathElement>();
    entity.Key.Path.Add(new GoogleData.KeyPathElement { Kind = "Consumer", Name = "Consumer-1" });
    var firstName = new GoogleData.Property();
    firstName.Values = new List<GoogleData.Value>();
    firstName.Values.Add(new GoogleData.Value { StringValue = "Samuel"});
    entity.Properties = new GoogleData.Entity.PropertiesData();
    entity.Properties.Add("FirstName", firstName);
    request.Mutation = new GoogleData.Mutation();
    request.Mutation.Upsert = new List<GoogleData.Entity>();
    request.Mutation.Upsert.Add(entity);
    var response = service.Datasets.BlindWrite(request, "my-appengine-project-id").Fetch();
}
private OAuth2Authenticator<AssertionFlowClient> CreateAuthenticator()
{
    var certificate = new X509Certificate2(TestClientCredentials.ClientCertificateFilePath, "notasecret",
        X509KeyStorageFlags.Exportable);
    var provider = new AssertionFlowClient(GoogleAuthenticationServer.Description, certificate)
    {
        ServiceAccountId = TestClientCredentials.CertificateEmailAddress,
        Scope = "https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/datastore"
    };
    var authenticator = new OAuth2Authenticator<AssertionFlowClient>(provider, AssertionFlowClient.GetState);
    return authenticator;
}

如果我使用web API控制台,它工作。

** UPDATE **

下面是我创建服务帐户的方法:
  1. 创建AppEngine应用程序。
  2. 导航到Google api控制台。
  3. 为AppEngine应用程序启用Google云数据存储API。
  4. 点击"创建OAuth 2.0客户端ID…"
  5. 给它一个假名字
  6. 选择"服务帐户"作为申请类型。
  7. 点击"创建客户端ID"。
  8. 点击"下载私钥"(位置表示为TestClientCredentials)。ClientCertificateFilePath(代码如下)。

Google Cloud Datastore . net客户端API拒绝403权限

与此题答案相同

为了使服务帐户与云数据存储实例正确配置,您必须使用文档中描述的云控制台创建它们。

或者,如果您真的想使用您使用[Google api控制台][3]创建的服务帐户,您可以执行以下操作:

  • 进入cloud.google.com/console
  • 点击项目id
  • 点击
  • 点击Teams
  • 点击添加成员
  • 将您的服务帐户添加为查看器