Ich habe eine iOS-App, die mit einem Server mit Rails interagiert und seit 3 Jahren stabil und zuverlässig ist. Der Server benötigt eine Basic- und SSL-Zertifizierung, und das funktioniert tadellos bis einschließlich iOS 7.Fehler bei der Standardauthentifizierung mit iOS 8
Ich sehe jedoch jetzt Authentifizierungsprobleme mit Geräten, die iOS 8 laufen funktioniert gut.
Bei der App-Initialisierung gibt es eine Flut von Datenanforderungen zur Synchronisierung mit dem Server, die die Standardauthentifizierung übergeben müssen.
Diese ergeben sich in der folgenden Delegatmethode treten
willSendRequestForAuthenticationChallenge
genannt zu werden ... und das Problem, weil diese endlos in Frage gestellt werden - der Code absichtlich beim zweiten Versuch schlägt fehl, wenn [Herausforderung previousFailureCount]> 0 (Der Codepfad folgt der Standardpraxis, indem cancelAuthenticationChallenge aufgerufen wird, wenn der vorherigeFailureCount> 0 ist) - siehe unten.
Ich habe die Herausforderung ids angemeldet, und diese sind über jede Herausforderung anders, auch wenn der previousFailureCount> 0.
- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodHTTPBasic])
{
if ([challenge previousFailureCount] == 0)
{
NSURLCredential *newCredential;
newCredential = [NSURLCredential credentialWithUser:MY_USERNAME
password:MY_PASSWORD
persistence:NSURLCredentialPersistenceForSession]; // Retain for rest of session
[[challenge sender] useCredential:newCredential forAuthenticationChallenge:challenge];
}
else
{
[[challenge sender] cancelAuthenticationChallenge:challenge];
// ...error will be handled by connection didFailWithError
}
}
}
Wenn ich den Anruf knock out die previousFailureCount zu überprüfen, gibt es unendlich viele Anrufungen die Herausforderung Methode.
Sobald jedoch diese Flut von Fehlern fehlgeschlagen ist, werden die nachfolgenden und späteren 'einzelnen' NSUrlRequests erfolgreich authentifiziert.
Auch dieses Problem ist spezifisch für iOS 8. Irgendwelche Ideen, warum eine "schnelle" Abfolge von Authentifizierungsanforderungen in iOS 8 fehlschlagen würde, aber in iOS 7 funktionieren?
Danke.
Bitte zeigen Sie den vollständigen Code für Methode 'Verbindung: willSendRequestForAuthenticationChallenge:'. – CouchDeveloper
@CouchDeveloper Fertig, danke für Ihr Interesse. – Snips
Ich habe das gleiche Problem, aber es ist mit NSURLSession Tasks und Downloads. Ich kann nicht herausfinden, wie man einfach herausfinden kann, wie viele Fehler für eine _task_ sind. Und nicht insgesamt. Ich kann keine Möglichkeit finden, dies jetzt zu tun, da sich das vorherigeFailureCount var anders verhält. – Salx