1

ユーザーがアプリを起動するたびに認証手順を実行する必要はありません。代わりに、アプリが 3 脚の OAuth 1.0a プロセスからアクセス トークンを保存し、それらを使用して保護されたリソースにアクセスするようにします。

これが私がこれまでに持っているものであり、毎回承認する(サインインしない)ように求め続けます.

何か案は?助けてください。GTMOauth ライブラリの使用。

    - (void)signIn
{
    activityIndicator.hidden = NO;
    [activityIndicator startAnimating];

    NSURL *requestURL = [NSURL URLWithString:@"http://webservice/oauth/request_token/"];
    NSURL *accessURL = [NSURL URLWithString:@"http://webservice/oauth/access_token/"];
    NSURL *authorizeURL = [NSURL URLWithString:@"http://webservice/oauth/authorize/"];
    NSString *scope = @"http://webservice";

    auth = [self getAuthForWebservice];

    [auth setCallback:@"http://webservice/OAuthCallback"];    

    GTMOAuthViewControllerTouch *viewController;
    viewController = [[GTMOAuthViewControllerTouch alloc] initWithScope:scope
                                                                language:nil
                                                         requestTokenURL:requestURL
                                                       authorizeTokenURL:authorizeURL
                                                          accessTokenURL:accessURL
                                                          authentication:auth
                                                          appServiceName:@"webservice"
                                                                delegate:self
                                                        finishedSelector:@selector(viewController:finishedWithAuth:error:)];

    [[self navigationController] pushViewController:viewController
                                           animated:YES];

    [self navigationController].navigationBarHidden = YES;    
}


- (void)viewController:(GTMOAuthViewControllerTouch *)viewController
      finishedWithAuth:(GTMOAuthAuthentication *)auth
                 error:(NSError *)error {
    if (error == nil) {
        [self performSelector:@selector(doAnAuthenticatedAPIFetch)];

    }
}

- (void)doAnAuthenticatedAPIFetch {
    NSString *urlStr = @"http://webservice/resource/";

    NSURL *url = [NSURL URLWithString:urlStr];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    [auth authorizeRequest:request];

    NSError *error = nil;
    NSURLResponse *response = nil;
    NSData *data = [NSURLConnection sendSynchronousRequest:request
                                         returningResponse:&response
                                                     error:&error];
4

1 に答える 1

2

gtm-oauth コントローラーはトークンをキーチェーンに保存します。ここに示すように、アプリの再起動時にキーチェーンから読み戻します。

于 2012-07-25T14:58:15.887 に答える