Использование нового Google Cloud Datastore v1beta клиентскую библиотеку, я получаю403 разрешение отказано в Google Cloud Datastore .NET API клиента
{
"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;
}
Если я использую консоль API для Интернета, она работает.
** UPDATE **
Вот как я создал учетную запись службы:
- создания приложения AppEngine.
- Перешел на консоль Google API.
- Включен API Google Cloud Datastore для приложения AppEngine.
- Нажмите «Создать идентификатор клиента OAuth 2.0 ...»
- Дал ему фиктивное имя.
- Выбрано «Учетная запись службы» в качестве типа приложения.
- Нажмите «Создать идентификатор клиента».
- Нажмите «Загрузить закрытый ключ» (расположение представлено как TestClientCredentials.ClientCertificateFilePath в коде ниже).
Я думаю, что это тот же самый вопрос, у меня есть? Можете ли вы сравнить свой токен с моим? (http://stackoverflow.com/questions/17094641/google-datastore-token-not-authorized) –
Можете ли вы подробно описать, как вы создали учетную запись службы? – proppy
@proppy см. Обновление выше –