NSURLConnection - Disable the authentication challenge response mechanism
afnetworking, cocoa-touch, ios, nsurlconnection, objective-c
Solution
You have a few of options to fully customize the authentication handling:
Utilize `setWillSendRequestForAuthenticationChallengeBlock:` and `setAuthenticationAgainstProtectionSpaceBlock:` from class `AFURLConnectionOperation` and set corresponding blocks where you can tailor the mechanism you require.
The headers contain documentation.
Override `connection:willSendRequestForAuthenticationChallenge:` in a subclass of `AFURLConnectionOperation`. This will effectively override the complete authentication mechanism setup in AFNetworking.
Note, that you cannot disable the "server validates client identity" authentication challenge -- this is part of the server. You MUST provide the correct credentials for the requested authentication method.
Problem
SITUATION - Using AFNetworking (NSURLConnection) to access my server API - The API needs Basic Authentication with token as username - The API returns HTTP 401 when token is invalid - I set the Basic Authentication headers before any request If it returns 401, I retry like this: ``` AFHTTPRequestOperation *requestOperation = [MyHTTPClient.sharedClient HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation *operation, id responseObject) { processSuccessBlock(operation, responseObject); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { processFailureBlock(operation, error); if (operation.response.statusCode == 401) [MyHTTPClient.sharedClient refreshTokenAndRetryOperation:operation success:processSuccessBlock failure:processFailureBlock]; }]; ``` PROBLEM - When the server returns HTTP 401 with a Basic Authentication challenge, AFNetworking/NSURLConnection sends the identical request twice (initial request and then in answer to the authentication challenge) - But because of the code above that I handle the HTTP 401 myself, this is totally unnecessary and I want it to stop answering the authentication challenge automatically WHAT I'VE TRIED - Responding with `cancelAuthenticationChallenge:` to `willSendRequestForAuthenticationChallenge:` is aborting the second call, but it gives the error code -1012 (NSURLErrorUserCancelledAuthentication) instead of 401 and masks the real response How do you disable the authentication challenge response mechanism so you get the servers response without calling it twice?