2013-02-11 2 views
0

Я хочу отъ имя пользователя и пароль, пропуск в URL (веб-службы) для аутентификации пользователя, которая возвращает истину и false.I'm делает это следующим образом:Pass имя пользователя и пароль в URL для аутентификации

NSString *userName = [NSString stringWithFormat:@"parameterUser=%@",txtUserName]; 
NSString *passWord = [NSString stringWithFormat:@"parameterPass=%@",txtPassword]; 
NSData *getUserData = [userName dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 
NSString *getUserLength = [NSString stringWithFormat:@"%d",[getUserData length]]; 
NSData *getPassData = [passWord dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 
NSString *getPassLength = [NSString stringWithFormat:@"%d",[getPassData length]]; 
NSMutableURLRequest *request = [[NSMutableURLRequest alloc]init]; 
[request setURL:[NSURL URLWithString:@"http://URL/service1.asmx"]]; 
[request setHTTPMethod:@"GET"]; 

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

+2

Я предполагаю, что это для упражнений, потому что это очень небезопасно. – Cyrille

+0

Вы действительно не должны указывать имя пользователя или пароль в URL-адресе. Вместо этого он должен быть в заголовках или в теле, предпочтительно закодированном/зашифрованном, отправленном через https (secure http). – Paaske

+0

@Paaske Спасибо за это предложение. На самом деле я хочу сделать это безопасным. Как я могу это сделать? – bapi

ответ

0

Попробуйте это: -

NSString *userName = [NSString stringWithFormat:@"parameterUser=%@",txtUserName.text]; 
    NSString *passWord = [NSString stringWithFormat:@"parameterPass=%@",txtPassword.text]; 
    NSData *getUserData = [userName dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 
    NSString *getUserLength = [NSString stringWithFormat:@"%d",[getUserData length]]; 
    NSData *getPassData = [passWord dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 
    NSString *getPassLength = [NSString stringWithFormat:@"%d",[getPassData length]]; 
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc]init]; 
    [request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://URL/service1.asmx?%@&%@",userName,passWord]]]; 
    [request setHTTPMethod:@"GET"]; 

Надеюсь, что это поможет вам ..

0
NSString *urlStr = [NSString stringWithFormat:@"http://URL/service1.asmx?%@&%@",userName,passWord]; 
[request setURL:[NSURL URLWithString:urlStr]]; 
+0

Спасибо за этот код. Но это будет безопасно? Если нет, как я могу сделать безопасное соединение? – bapi

+0

Это зависит от того, ожидает ли сервер usrName/pswd в данных сообщения или нет. Обычно учетные данные устанавливаются в почтовых данных. Я не знаю, что ожидает ваш сервер –

+0

Моя БД ожидает строку. Вы имеете в виду, что это должно быть так, чтобы сделать безопасным? [Request setURL: [NSURL URLWithString: [NSString stringWithFormat: @ "http: // URL/service1.asmx% @ &% @», имя пользователя, пароль]]]; [запрос setHTTPMethod: @ "POST"]; или что-то нужно добавить? – bapi

0

Во-первых, я бы не передать имя пользователя и пароль через в ссылке. Вы должны сделать это, используя пост.

NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://URL/service1.asmx?"]]; 

NSString *userName = [NSString stringWithFormat:@"parameterUser=%@",txtUserName]; 
NSString *passWord = [NSString stringWithFormat:@"parameterPass=%@",txtPassword]; 
NSString *postString = [NSString stringWithFormat:@"username=%@&password=%@",userName, passWord]; 
NSData *postData = [NSData dataWithBytes: [postString UTF8String] length: [postString length]]; 

//URL Requst Object 
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:TIMEOUT]; 
[request setHTTPMethod:@"POST"]; 
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
[request setHTTPBody: postData]; 

Это более безопасный способ передачи конфиденциальных данных по URL-адресу.

Редактировать

Чтобы получить ответ, вы можете проверить это. NSURLConnection и AppleDoc NSURLConnection

Вы можете использовать несколько разных методов для обработки ответа с сервера. Вы можете использовать NSURLConnectionDelegate

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
[self.connection start]; 

вместе с спинами делегата вызова:

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 

    NSLog(@"didReceiveData"); 
    if (!self.receivedData){ 
     self.receivedData = [NSMutableData data]; 
    } 
    [self.receivedData appendData:data]; 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 

    NSLog(@"connectionDidFinishLoading"); 
    NSString *receivedString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
    NSLog(@"receivedString:%@",receivedString); 

} 

Или вы можете также использовать NSURLConnection sendAsynchronousRequest блок

NSOperationQueue *queue = [[NSOperationQueue alloc] init]; 

[NSURLConnection sendAsynchronousRequest:urlRequest queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) 
{ 
    NSString *receivedString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
     NSLog(@"receivedString:%@",receivedString); 

}]; 
+0

Спасибо за предложение; Как проверить, успешно или неудачно (т. Е. True или false), потому что мой веб-сервис возвращает «true» или «false» в зависимости от успеха или неудачи. Также, какова ценность этого «application/x-www-form- urlencoded "и" Content-Type ", могу ли я сохранить его таким, какой он есть? Я новичок в этом, пожалуйста, предложите. – bapi

+0

Выглядит ваше предложение более уместно, не могли бы вы дать больше идеи или ответа на мой комментарий? Спасибо. – bapi

+0

Я добавил редактирование на свое сообщение, в котором есть ссылки на то, как получить ответ с сервера. Я добавлю другое редактирование с некоторым примером кода. – Jaybit

0

Для повышения безопасности, вы можете использовать Http Basic Authentication. Есть ответ here.

+0

Я не хочу использовать базовую аутентификацию, потому что моим сетям не доверяют. Спасибо. – bapi

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