この以前のstackoverflow.comの投稿でも同じ問題が発生しています。
具体的には、「Auth」トークンを正しく取得できるようですが、後のページにアクセスするときにヘッダーで使用しようとすると、ログインページのHTMLが返されます。
この投稿に関連するリンクをたどると、このURLを後で呼び出す必要があると判断しました。
URLを呼び出すと、ACSID Cookieが提供されます。このCookieは、認証された状態を維持するために、後続の呼び出しで渡す必要があります。
このCookieをリクエストするとき、次のようにクエリ文字列に追加して元の認証トークンを指定する必要があるというさまざまな投稿を読みました。
?auth=this_is_my_token
また、 Googleのドキュメントで説明されているように、httpヘッダーの名前/値が次のようになるようにhttpヘッダーに設定する必要があることも読みました。
Authorization: GoogleLogin auth=yourAuthToken
両方のアプローチを試しましたが、Cookieが返されませんでした。私はWireshark、Firefox用のLiveHttpHeaders、およびこのようなものが返されるかどうかを確認するための単純な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);
}
ClientLoginGoogleAppEngineコードに使用できることを願っています。