2011-07-15 13 views
3


私は自分のIpadアプリケーションのWebServicesデータを取得しようとしています。
Objective-CとPreemptive認証の質問

これを行うには、私はNSMutableURLRequestでNSURLConnectionを使用しています。

Webサービスが先制基本認証ではApache-コヨーテ1.1上で公開し、私は客観C.からの私の資格情報を送信する方法がわからない

誰もが、私はObjetiveに私のユーザー/パスワードを設定することができます方法を知っているされていますApache Preemptive認証システムでクライアントをログするには?

ありがとうございます。

答えて

1

EDIT:

credsを自分で設定するためには、ユーザー名とパスワードをbase64エンコードすることができ、適切なヘッダーを設定する必要があります。 Cocoa With LoveのMatt Gallagherは、これを簡単に行うためにhow to add a category to NSDataに投稿しました。

NSString* username = @"username"; 
NSString* password = @"password"; 

NSString* encodedUsername = [[username dataUsingEncoding:NSUTF8StringEncoding] base64EncodedString]; 
NSString* encodedPassword = [[password dataUsingEncoding:NSUTF8StringEncoding] base64EncodedString]; 

NSURL* url = [NSURL URLWithString:@"http://yourUrl.com/"]; 
NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url]; 
NSString* headerValue = [NSString stringWithFormat:@"Basic %@:%@", encodedUsername, encodedPassowrd]; 
[request addValue:@"Authorization" forHTTPHeaderField:headerValue]; 

[NSURLConnection connectionWithRequest:request delegate:self]; 

資格証明書のすべての使用と同様に、これらの証明書は、基本的にクリアテキストで渡されているので、あなたはすべてのHTTPS上でこれをやっていることを確認してください。はい、あなたは間違いなく(すなわち、いくつかの https://... URLを経由して)SSL経由の基本認証を行いたい、

NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com/top_secret/"]; 
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
[request setAuthenticationScheme:(NSString *)kCFHTTPAuthenticationSchemeBasic]; /** preemptively present credentials **/ 
[request setUsername:@"username"]; 
[request setPassword:@"password"]; 
[request startSynchronous]; 
NSError *error = [request error]; 
if (!error) 
    NSString *response = [request responseString]; 

そして:

+0

didReceiveAuthenticationChallengeデリゲートは、プリエンプティブシステムでは決して呼び出されません。 (最初に.net webserviceを試してみましたが、デリゲートは正常に動作しました) –

+0

@gabriel mendez - 要求に応じてcredsを設定するように更新されました。 –

+1

私はヘッダが次のようなものでなければならないと思います: NSMutableString * loginString =(NSMutableString *)[@ "" stringByAppendingFormat:@ "%@:%@"、userName、password]; NSString * encodedLoginData = [Base64エンコード:[loginString dataUsingEncoding:NSUTF8StringEncoding]]; NSString headerValue = [@ "Basic" stringByAppendingFormat:@ "%@"、encodedLoginData]; 今は魅力のように働いています。ありがとうございました。 –

0

ASIHTTPRequestフレームワーク、which makes preemptive Basic authentication requests simpleの使用を検討してください。

+0

同期リクエストを使用することをお勧めします。 –

+0

私は '-startSynchronous'メソッドを使ってリクエストを実証しました。 'ASIHTTPRequest'を使って非同期要求を行うのはかなり簡単です:http://allseeing-i.com/ASIHTTPRequest/How-to-use#creating_an_asynchronous_request –

関連する問題