سؤال

ولدي موقع على شبكة الإنترنت التي استضافتها على IIS مع مصادقة النوافذ. أحاول الوصول إليه في واحدة من بلدي iPhone تطبيق الويب. حاليا أنا باستخدام هذا الرمز، ولكنه لا يعمل.

وNSString * authString = [[[NSString stringWithFormat: @ "٪ @: @٪"، @ "myusername" @ "mypassword"] dataUsingEncoding: NSUTF8StringEncoding] base64Encoding]؛

authString = [NSString stringWithFormat: @"Basic %@", authString];

**[requestObj setValue:authString forHTTPHeaderField:@"Authorization"];**

ويتم استضافتها التطبيق الويب الخاص بي مع مصادقة النوافذ. ولكن هنا أنا باستخدام الأساسية. يمكن لأي واحد نشر ما هو رأس HTTP الصحيح لذلك.

والشكر ..

هل كانت مفيدة؟

المحلول

وأعتقد أن الفرق الرئيسي هو تحتاج إلى تحديد المجال الذي تقوم مصادقة ضد وكذلك اسم المستخدم وكلمة المرور. شيء من هذا القبيل يجب أن تعمل. لقد استعملت طلب متزامن الإيجاز، من الناحية المثالية يجب استخدام ASINetworkQueue أو NSOperationQueue لأداء الطلب.

NSString *username = @"test";
NSString *password = @"test";
NSString *domain = @"test";
NSURL *url = [NSURL URLWithString:@"http://myurl"];
ASIHTTPRequest *request = [[[ASIHTTPRequest alloc] initWithURL:url] autorelease];
[request setUseSessionPersistence:YES];
[request setUsername:username];
[request setPassword:password];
[request setDomain:domain];
[request start];
if ([request error]) {
    if ([[request error] code] == ASIAuthenticationErrorType) {
        //Authentication failed
    }
} else {
    NSLog([request responseString]);
}

وأنا لم يكن لديك إمكانية الوصول إلى خادم ويندوز لاختبار هذا، ولكن لقد اختبرت NTLM في الماضي لذلك يجب أن تعمل ...:)

نصائح أخرى

ومصادقة Windows (NTLM) ليست بسيطة كما المصادقة الأساسية. NTLM يتطلب webrequest أكثر من واحد للتفاوض على الأمن حتى ليس هناك رأس HTTP ثابت يمكنك إرسالها إلى تسجيل الدخول.

ويمكنك استخدام ASIHTTPRequest مكتبة لأداء NTLM عبر المصادقة HTTP.

وأنا لست متأكدا 100٪ أنه يدعم مصادقة NTLM ولكن هل حققت في طريقة connection:didReceiveAuthenticationChallenge على NSUrlConnection؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top