私は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で使用できないのですか?
ありがとう、Nick。 didReceiveAuthenticationChallengeで提供したものではなく、別の方法で保存されたNSURLCredentialsが使用されていたため、基本的な認証の権利を取得することが重要だったのかもしれません。私がdidReceiveAuthenticationChallengeで自分自身で提供したものよりも永続的な資格証明が優先されますか? – Dennis
資格情報ストアに有効なNSURLCredentialsがある場合、didReceiveAuthenticationChallengeは呼び出されません - 実際には保存されたものが優先されます。 –