1

I was using json(NSJSONSerialization) and NSURL for server client communication. Till now it was working fine but now NTLM security has been implemented on server.

Can anyone tell me how to send request with NTLM in iOS ?

Thanks

parikhnirav
  • 33
  • 1
  • 7
  • Have a look at this post: http://stackoverflow.com/questions/628935/how-to-perform-an-ntlm-challenge-on-the-iphone?rq=1 and this one: http://stackoverflow.com/questions/3818120/how-to-implement-ntlm-authentication-for-uiwebview?rq=1 – mttrb Nov 05 '12 at 06:08

2 Answers2

1

This code will be helpful

NSMutableString *nodeContent = [[NSMutableString alloc]init];

    NSString *soapFormat = [NSString stringWithFormat:@"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
                            "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n"
                            "<soap:Body>\n"
                            "<GetListCollection xmlns=\"http://schemas.microsoft.com/sharepoint/soap/\" />\n"
                            "</soap:Body>\n"
                            "</soap:Envelope>\n"];



    NSLog(@"The request format is %@",soapFormat);

    NSURL *locationOfWebService = [NSURL URLWithString:@"http://localhost/_vti_bin/lists.asmx"];

    NSLog(@"web url = %@",locationOfWebService);

    NSMutableURLRequest *theRequest = [[NSMutableURLRequest alloc]initWithURL:locationOfWebService];

    NSString *msgLength = [NSString stringWithFormat:@"%d",[soapFormat length]];


    [theRequest addValue:@"text/xml" forHTTPHeaderField:@"Content-Type"];
    [theRequest addValue:@"http://schemas.microsoft.com/sharepoint/soap/GetListCollection" forHTTPHeaderField:@"SOAPAction"];
    [theRequest addValue:msgLength forHTTPHeaderField:@"Content-Length"];
    [theRequest setHTTPMethod:@"POST"];
    //the below encoding is used to send data over the net
    [theRequest setHTTPBody:[soapFormat dataUsingEncoding:NSUTF8StringEncoding]];


    NSURLConnection *connect = [[NSURLConnection alloc]initWithRequest:theRequest delegate:self];

    if (connect) {
        webData = [[NSMutableData alloc]init];
    }
    else {
        NSLog(@"No Connection established");
    }

See the Tutorial and sample code

for NTLM request for iOS. I used this.

Nazik
  • 8,696
  • 27
  • 77
  • 123
1

If you can use NSURLProtectionSpace, it provides NSString *NSURLAuthenticationMethodNTLM; authentication method.

Something on the lines:

NSURLProtectionSpace *protectionSpace = [[NSURLProtectionSpace alloc]
    initWithHost: _host
    port: 80
    protocol: @"http"
    realm: _host
    authenticationMethod:NSURLAuthenticationMethodNTLM];
Aziz Shaikh
  • 16,245
  • 11
  • 62
  • 79