1

アプリが 1 つ以上の API にアクセスすることを承認する方法については、Google の例に従っています。問題は、認証に成功すると access_token を取得することですが、この後、それが格納されているキーチェーンから取得できません。iPhone シミュレーターがキーチェーンで動作しないことをどこかで読みましたが、それが原因でしょうか?もしそうなら、アクセス トークンを保存する別の方法を教えてもらえますか?

これが私のコードです:

    static NSString *const kKeychainItemName = @"OAuthGoogleReader";

    GTMOAuth2Authentication *auth;
    auth = [GTMOAuth2ViewControllerTouch authForGoogleFromKeychainForName:kKeychainItemName
                                                                 clientID:kClientID
                                                             clientSecret:kClientSecret];

BOOL isSignedIn = [auth canAuthorize];
    if (isSignedIn) {
        NSLog(@"Signed");
        self.window.rootViewController = self.viewController;
        auth.accessToken = [[NSUserDefaults standardUserDefaults] objectForKey:@"accessToken"];
          NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://www.google.com/reader/api/0/subscription/list?access_token=%@", [auth accessToken]]]];
          GTMHTTPFetcher* myFetcher = [GTMHTTPFetcher fetcherWithRequest:request];

          // optional upload body data

          //[myFetcher setPostData:[postString dataUsingEncoding:NSUTF8StringEncoding]];
        [myFetcher setAuthorizer:auth];
          [myFetcher beginFetchWithDelegate:self
                          didFinishSelector:@selector(myFetcher:finishedWithData:error:)];
         // - (void)myFetcher:(GTMHTTPFetcher *)fetcher finishedWithData:(NSData *)retrievedData error:(NSError *)error;
    }else{
    NSString *scope = @"https://www.google.com/reader/api/";

    GTMOAuth2ViewControllerTouch *viewController;
    viewController = [[GTMOAuth2ViewControllerTouch alloc] initWithScope:scope
                                                                clientID:kClientID
                                                            clientSecret:kClientSecret
                                                        keychainItemName:kKeychainItemName
                                                                delegate:self
                                                        finishedSelector:@selector(viewController:finishedWithAuth:error:)];

        self.window.rootViewController = viewController;
    }

エラーが発生します:

2012-08-22 16:54:47.253 greader[20833:c07] Signed
2012-08-22 16:54:47.705 greader[20833:c07] Cannot authorize request with scheme http (<NSMutableURLRequest http://www.google.com/reader/api/0/subscription/list?access_token=(null)>)

ご覧のとおり、access_token は nil です。

また、このライブラリの使用方法に関する簡単な例もいくつかあります。

ありがとうございました!

4

1 に答える 1

1

gtm-oauth2ライブラリは、キーチェーン上のアクセストークンとその他の認証値の保存と取得を処理します。安全性が不十分なため、アプリはアクセストークン文字列を直接使用する必要はなく、認証トークンをNSUserDefaultsに配置する必要もありません。

gtm-auth2もデフォルトで、http:スキームを使用してURLにアクセストークンを添付することを拒否します。OAuth 2は、https:スキームURLで使用する場合にのみ安全です。

于 2012-08-23T07:35:36.350 に答える