У меня такая же проблема в этом предыдущем postoffflow.com post.
В частности, я, похоже, могу правильно получить токен "Auth", но попытки использовать его в заголовке при доступе к более поздним страницам все равно возвращают мне HTML-страницу входа.
Следуя ссылкам, связанным с этим сообщением, я решил, что вам нужно сделать следующий вызов этого URL.
Затем вызов URL-адреса даст вам файл cookie ACSID, который затем должен быть передан в последующих вызовах, чтобы поддерживать аутентифицированное состояние.
При запросе этого файла cookie я прочитал разные сообщения, в которых вам нужно указать ваш оригинальный токен аутентификации, добавив его в строку запроса, чтобы:
?auth=this_is_my_token
Я также прочитал, что вы должны установить его в заголовке http, как описано в документации Google, чтобы имя/значение заголовка http:
Authorization: GoogleLogin auth=yourAuthToken
Я пробовал оба подхода и не вижу возвращенных файлов cookie. Я использовал Wireshark, LiveHttpHeaders для Firefox и простые инструкции NSLog, пытаясь увидеть, возвращается ли что-нибудь подобное.
Ниже приведен фрагмент кода, который я использовал.
NSURL* url = [NSURL URLWithString:[NSString stringWithFormat:@"http://yourapp.appspot.com/_ah/login?auth=%@", [token objectForKey:@"Auth"]]];
NSHTTPURLResponse* response;
NSError* error;
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
[request setValue:[NSString stringWithFormat:@"GoogleLogin auth=%@", [token objectForKey:@"Auth"]] forHTTPHeaderField:@"Authorization"];
NSData * data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
//show me all header fields
NSLog([[response allHeaderFields] description]);
//show me the response
NSLog(@"%@", [[[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding] autorelease]);
NSArray * all = [NSHTTPCookie cookiesWithResponseHeaderFields:[response allHeaderFields] forURL:[NSURL URLWithString:@"http://yourapp.appspot.com/_ah/login"]];
//show me all cookies
for (NSHTTPCookie *cookie in all)
{
NSLog(@"Name: %@ : Value: %@", cookie.name, cookie.value);
}
Надеюсь, вы можете использовать ClientLogin
для кода Google App Engine.