2

私はPanther、Tiger、Leopardシステム上で実行しているプログラムをNSURLConnection認証に使用しています( "encodedUserPass"は、 base64エンコードユーザーによって:...パス)NSURLConnectionはTigerで失敗し、PantherとLeopardで成功します

[theRequest addValue:encodedUserPass forHTTPHeaderField:@"Authorization"]; 
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self]; 

後で... didReceiveAuthenticationChallenge

if ([challenge previousFailureCount] == 0) { 
NSURLCredential *newCredential; 
newCredential=[NSURLCredential credentialWithUser:login_name password:password persistence:NSURLCredentialPersistenceNone]; 
[[challenge sender] useCredential:newCredential forAuthenticationChallenge:challenge]; 
} 

にこれはパンサーとLeopardのシステムに完全に正常に動作しますが、タイガーに全く失敗しました。しかし、PantherとLeopardの "didReceiveAuthenticationChallenge"でも通常呼び出される(つまり、手動でヘッダーを設定することは動作しないように見える)ことは奇妙です。

Tigerでは、didReceiveAuthenticationChallengeは常に呼び出され、上記のように応答しようとしてから、失敗して再び呼び出されます。

2つの質問:(i)ヘッダを手動で設定しないのはなぜですか? (2)上記の方法がTiger(10.4)で失敗するのはなぜですか?いくつかの考えた後、私はbase64で符号化方式と間違って何かをすることがなかったことに気づいた、とありました

LATER UPDATE私は追加されませんでしたBASE64をもたらすために等号4文字の倍数までの文字列。私はそれを解決しました

while ([bareString length] % 4) [bareString appendString:@"="]; 

そして、このプログラムは3つのプラットフォームすべてで動作します。だから質問(i)は答えられます:私は等号で埋めていなかったので、手動でヘッダーを設定することはできませんでした。

質問:私はdidReceiveAuthenticationChallenge successfulyをTigerで使用できないのですか?

答えて

0

私はちょうどあなたが記述同じ問題につまずいた、と指定NSURLCredentialPersistenceForSessionがないのに対し、NSURLCredentialPersistenceNoneは、単に、タイガーに動作しないことを発見しました。

アプリケーションに応じて、許容可能な回避策がある場合とそうでない場合があります。

Appleのマニュアルでは、実際に 'セッション'のスコープが指定されていないため、アプリケーションが終了するまで、多少の欲求があります。

+0

ありがとう、Nick。 didReceiveAuthenticationChallengeで提供したものではなく、別の方法で保存されたNSURLCredentialsが使用されていたため、基本的な認証の権利を取得することが重要だったのかもしれません。私がdidReceiveAuthenticationChallengeで自分自身で提供したものよりも永続的な資格証明が優先されますか? – Dennis

+0

資格情報ストアに有効なNSURLCredentialsがある場合、didReceiveAuthenticationChallengeは呼び出されません - 実際には保存されたものが優先されます。 –

関連する問題