1

Я новичок в iOS и https. Я начинаю ученик программного обеспечения. Я хочу написать приложение, которое извлекает данные (например, номер класса, объявления и т. Д.) Из моей учетной записи uni и показывает мне в моем приложении.NSURLCredential-credentialForTrust vs username: password

Как правило, я перехожу на страницу студента uni, логин с моим именем пользователя и паролем, и эта информация появилась в браузере.

Я пробовал использовать NSURLConnection и его делегата. посмотрите мой код ниже. В начале в соединении метода: didReceviveAuthenticationChallenge, я создал объект NSURLCredential [NSURLCredential withUser: password: persistence]. И он не работал. Затем я попытался выполнить NSLog, после чего я узнал, что метод protectionSpace.authenticationMethod - это NSURLAuthenticationMethodServerTrust.

Затем я попытался прочитать документ Apple и некоторые источники в googled. Но я не могу получить его, а затем отредактировал свой код, как вы видели ниже (это мое окончательное издание, и оно все еще не работает).

Дело в том, что я действительно не получаю: я ожидаю, что сервер спросит меня о моем имени пользователя и пароле. Вместо этого он попросил credentialForTrust, который на основе этих документов, которые я прочитал, предлагает мне оценить доверие делегата NSURLConnection к серверу. Однако сервер никогда не запрашивал имя пользователя и пароль. так, как сервер может узнать, к какой учетной записи я обращаюсь.

Итак, я думаю, что это должно быть какое-то отношение между этим сертификатом (доверием) с именем пользователя и паролем. Я действительно не понимаю, как это работает.

Я думаю, мой вопрос может быть не совсем понятным или чем-то, и это может быть глупо. Я принимаю это, потому что я никогда не узнал все эти вещи.

Итак, пожалуйста, кто-нибудь объяснит мне, как это работает. Вы можете предположить, что у меня есть некоторое базовое понимание того, что такое https, SSL, NSURLConnection, NSURLCredential и т. Д. И, пожалуйста, направляйте меня к решению.

Я ценю за все ваши усилия.

Ниже мой код, (он не работает).

The NSLog() в связи: didReceiveAuthenticationChallenge, распечатать "NSURLAuthenticationMethodServerTrust"

- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace 
{ 
    return YES; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge 
{ 
    NSLog(@"authenticationMethod is: %@\n",challenge.protectionSpace.authenticationMethod); 
    if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]){ 
      [challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge]; 
    }else{ 
      NSURLCredential *creden = [[NSURLCredential alloc] initWithUser:myusername password:mypassword persistence:NSURLCredentialPersistenceForSession]; 
      [[challenge sender] useCredential:creden forAuthenticationChallenge:challenge]; 
    } 
} 

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
{ 
    NSLog(@"didFailWithError: %@\n %@\n", 
      [error localizedDescription], 
      [[error userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]); 
} 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{ 
    [self.myData appendData:data]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ 
    [self.myData setLength:0]; 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    NSString *str = [[NSString alloc] initWithData:self.myData encoding:NSASCIIStringEncoding]; 
    NSLog(@"Data in String %@", str); 
} 

ответ

1

NSURLAuthenticationMethodServerTrust проблемы возникают, когда URL загрузка системы не доверять серверу. Если вы хотите избежать этих вызовов, убедитесь, что iOS доверяет сертификату вашего сервера (by installing it manually или имеет доверенный корень, такой как Verisign).

Смежные вопросы