用户/密码错误的ios HTTP基本身份验证(401个未经授权的额外数据)

时间:2013-06-10 14:36:40

标签: ios http basic-authentication wireshark

HTTP基本身份验证存在一个小问题。 我有一些Web服务(REST),它为我提供了一些JSON。 我既没有服务来源也没有访问此服务器。

我可以使用正确的用户名和密码在服务器上进行身份验证。 这是我正在使用的代码:

NSString *path = @"http://user:pwd@%bla.bla.com/api_key/";
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:path]];

AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:urlRequest
        success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
            NSLog(@"Response: %@", JSON);
            if (successBlock) {
                successBlock(...);
            }
        } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
            if (errorBlock) {
                errorBlock(error, JSON);
            }
        }];

[operation setAuthenticationChallengeBlock:^(NSURLConnection *connection, NSURLAuthenticationChallenge *challenge) {
    if (challenge.previousFailureCount == 0) {
        NSURLCredential *credentials = [NSURLCredential credentialWithUser:username password:password
                                                               persistence:(NSURLCredentialPersistenceNone)];
        [[challenge sender] useCredential:credentials forAuthenticationChallenge:challenge];
    }
    else {
        //[[challenge sender] continueWithoutCredentialForAuthenticationChallenge:challenge];
        [[challenge sender] cancelAuthenticationChallenge:challenge];
        NSLog(@"Login error: Are credentials correct?");
        if (errorBlock) {
            //errorBlock(challenge.error, challenge.failureResponse);
        }
    }

    NSURLRequest* req = connection.currentRequest;
    AFJSONRequestOperation* op = operation;
    NSLog(@"hdr %@",challenge.error);
}];

[operation setRedirectResponseBlock:^NSURLRequest *(NSURLConnection *connection, NSURLRequest *request, NSURLResponse *redirectResponse) {
    NSLog(@"redirect");
    return request;
}];

[operation start];

问题是我不知道如何在身份验证失败时获取服务器发送的额外数据(它会发送额外的字符串,显示错误,用户名或密码)。 我使用Wireshark应用程序使用错误的密码记录了所有http身份验证过程。

以下是一次身份验证尝试的屏幕截图(密码错误): enter image description here

我看到服务器确实发送了明文密码不正确的通知,但我不知道如何以及在何处捕获密码。

有什么想法吗?

提前谢谢。

0 个答案:

没有答案