2011-10-28 8 views
0

iPhoneアプリのセキュリティで保護されたユーザー認証を実装しようとしています。私はかなり初心者です。私はさまざまな方法で多くのコードスニペットと提案を見て、いくつかは日付がずれていたようです。現在のシナリオでは、何が良い選択肢でしょうか? JSON? ASIHTTPリクエスト?PHPサーバーのiPhoneアプリからのユーザー認証に適したソリューション

今のところ、私はこれに対して適切な解決策を見つけることができませんでした。私は、さまざまなアイデアを統合するのが少し難しく、自分のニーズに合った解決策を考え出すことが難しいと思っています。誰かがサンプルコードを共有したり、少なくともどこかに投稿されたソリューションを私に指摘したりすることができれば素晴らしいだろう。前もって感謝します。

トニー

答えて

1

サーバーにはどのようなユーザー認証がありますか?認証のためにBasic Authを使用することができます。これは、すべてのリクエストでAuthorizationヘッダーを送信することを意味します。

ASIHTTPRequest has functionality enabling basic authを使用しても問題ない場合は、ログインダイアログを表示することもできます(プロジェクトが終了したばかりです)。

明らかに、implement basic authentication on your serverも必要です。

+0

ありがとうございます。私はサーバーを制御している。私が基本的に必要とするのは、「POST」を使用して認証を実行することです。私はObjective-Cの新機能ですから、サンプルコードは大きな助けになります。私は要求(NSData、NSDictionary)が構成されている部分が必要です。 –

+0

ASIHTTPRequestを使用している場合は、[request setUsername:@ "foo"]と[request setPassword:@ "bar"]を使用して資格情報を設定するだけで済みます。また、組み込みの認証ダイアログを使用する場合は、[request setShouldPresentAuthenticationDialog:YES]も設定してください。 他のフレームワークを使用している場合、コードは[request addRequestHeader:@ "Authorization" value:@ "あなたのコード化された認証文字列"]と非常によく似ています。 –

0

私はこれを使用して、iOSアプリケーションからリモートPHPサーバーを使用しているユーザーを正常に認証しました。少し遅れましたが、誰かを助けるかもしれません:

-(void)saveNewUserDetails{ 
    [[NSUserDefaults standardUserDefaults] setObject:self.username.text forKey:@"userName"]; 
    [SSKeychain setPassword:self.pwd.text forService:@"MiniCEXReporting" account:self.username.text]; //store securely rather than in NSUserDefaults 
    [[NSUserDefaults standardUserDefaults] synchronize]; 

} 

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

    receivedData=[[NSMutableData alloc] init]; 

    NSString *userString=self.username.text; 
    postRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"https://someURLhereWithUsernameappended/%@", userString]]]; 

    //for the real thing 
    //postRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"https://somsis-dev.leeds.ac.uk/api/minicex/%@", self.username.text]]]; 

    [postRequest setHTTPMethod:@"POST"]; 

    NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:postRequest delegate:self]; 
    [connection start];  
} 

- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge { 
    if ([challenge previousFailureCount] == 0) { 
     NSLog(@"received authentication challenge"); 
     NSURLCredential *newCredential = [NSURLCredential credentialWithUser:self.username.text 
                    password:self.pwd.text 
                   persistence:NSURLCredentialPersistenceForSession]; 
     NSLog(@"credential created"); 
     [[challenge sender] useCredential:newCredential forAuthenticationChallenge:challenge]; 
     NSLog(@"responded to authentication challenge"); 
    } 
    else { 
     NSLog(@"authentication failure username -%@- with password -%@-", self.username.text, self.pwd.text); 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Authentication Error" 
                 message:@"Please check your username and password" 
                 delegate:self 
               cancelButtonTitle:@"Ok" 
               otherButtonTitles:nil]; 
     [alert show]; 
     [self.activityIndicator stopAnimating]; 
     self.activityIndicator.hidden=YES; 
    } 
} 
関連する問題