2015-05-08 2 views
0

Я хочу использовать API Google JSON для приложения iOS. Но я бы сделал это без аутентификации пользователя, так как не было сохранено никаких конфиденциальных данных. Таким образом, я надеялся использовать открытый ключ API, описанный здесь https://cloud.google.com/storage/docs/json_api/v1/how-tos/authorizingGoogle Json Api без использования Oauth

Heres запроса URL:

NSString* text = self.textField.text; 

NSString* data = [NSString stringWithFormat:@"message=%@", text]; 

NSData* postData = [data dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 
NSString* length = [NSString stringWithFormat:@"%lu",(unsigned long)[postData length]]; 

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
request.URL = [NSURL URLWithString:@"https://www.googleapis.com/upload/storage/v1/b/myBucket/o?uploadType=media&name=myObject&key=myApiKey"]; 
request.HTTPMethod = @"POST"; 
[request setValue:length forHTTPHeaderField:@"Content-Length"]; 
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Current-Type"]; 
[request setHTTPBody:postData]; 

NSURLConnection* conn = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 

if (conn) { 
    NSLog(@"connection successful"); 
}else { 
    NSLog(@"connection failed"); 
} 

с помощью этого Тхо, я получаю 401 Войти Требуется ошибка.

Что мне не хватает?

+0

Я обновил свой ответ .. см. Ниже – FormigaNinja

ответ

1

От Google docs:

Когда приложение запрашивает личные данные, запрос должен быть авторизован прошедшим проверку подлинности пользователя, который имеет доступ к этим данным.

Когда ваше приложение запрашивает общедоступные данные, запрос не требуется авторизоваться, но должен сопровождаться идентификатором, таким как ключ API.

Каждый запрос, отправляемый вашим приложением в Google Cloud Storage API JSON, должен идентифицировать ваше приложение в Google. Существует два способа определить ваше приложение: использовать токен OAuth 2.0 (который также разрешает запрос) и/или использовать ключ API приложения.

Поскольку вы пытаетесь сделать публичный запрос, вам просто нужно создать ключ API и использовать его вместо key=API_KEY, как вы это делаете.

Update

Вы должны использовать OAuth 2.0 маркер, потому что в вашем случае, если вы делаете запрос на загрузку. Как отметил @jterrace, ключ API не является формой аутентификации, поэтому этого недостаточно для успешного завершения запроса.

+0

Да, я использую фактический ключ, который я создал, я просто не хотел размещать его в stackoverflow для всех, чтобы посмотреть на – Pita

+0

Конечно ... поэтому, я спрашиваю вы можете опубликовать немного больше о своем коде запроса. Вы используете 'POST' вместо' GET' для выполнения запроса? Как насчет содержимого POST? – FormigaNinja

+1

Ключ API не является формой аутентификации. – jterrace

2

Вы пытаетесь загрузить объект анонимно в ведро. По умолчанию это недопустимо, так как это означает, что любой, кто знает о вашем ковше, потенциально сможет загрузить в ваше ведро столько объектов, сколько им без ограничений.

Тем не менее, если вам удобно с этой возможностью, это, безусловно, возможно. Предоставление всем пользователям разрешения WRITE в ведре позволит завершить вызов в вашем вопросе.

+0

Спасибо за объяснение, как это отличается от того, как Amazon DyanmoDB работает там, где все, что вам нужно, это идентификатор пула идентификаторов ?, кто имеет этот Идентификатор будет иметь право доступа к данным? Я надеялся избежать фазы аутентификации пользователей, используя общедоступный ключ API, но я предполагаю, что wont do – Pita

+0

Идентификаторы пулов Amazon Identity немного отличаются от API-ключей. API-ключи идентифицируют проект, используемый для целей учета, но не предоставляют никаких привилегий безопасности.Эквивалент Google для идентификатора пула идентификаторов - это «учетная запись службы», которая является учетной записью, представляющей приложение, и может быть предоставлена ​​права на чтение или запись, такие как любой другой пользователь. Однако вам нужно использовать авторизацию для работы в качестве учетной записи службы. –

Смежные вопросы