Запрашивает аутентификацию в SharePoint на iPhone

Я сделал простое клиентское приложение SharePoint для iPhone, которому требуется доступ к некоторым веб-службам SharePoint (в основном /_vti_bin/Lists.asmx). У меня возникли проблемы с выяснением того, как это сделать в более новой среде SharePoint, такой как Office365.

В старой среде BPOS с аутентификацией на основе форм я смог пройти аутентификацию в этих службах, просто реализовав метод didReceiveAuthenticationChallenge;

-(void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
NSURLCredential *newCredential = [NSURLCredential credentialWithUser:username
                                               password:password
                                            persistence:NSURLCredentialPersistenceForSession];
[[challenge sender] useCredential:newCredential
       forAuthenticationChallenge:challenge];
}

Это, очевидно, больше не работает с сайтами SharePoint, имеющими аутентификацию на основе утверждений, поэтому я провел небольшое исследование и обнаружил, что мне нужно FedAuth файлов cookie, которые должны быть прикреплены к запросу.

http://msdn.microsoft.com/en-us/library/hh147177.aspx

Согласно этой статье, с помощью приложений .NET представляется возможным получить эти файлы cookie HTTPOnly FedAuth с помощью WININET.dll, но я полагаю, что это недоступно на iPhone?

Затем я увидел приложение SharePlus, представляющее UIWebView и предлагающее пользователю войти в сначала их учетная запись Office365 на экране браузера (это та же концепция, которая описана в разделе «Включение входа пользователя для удаленной аутентификации» статьи выше).

Итак, я попытался посмотреть, могу ли я каким-то образом получить доступ к этим файлам cookie FedAuth, войдя в учетную запись Office365 через UIWebView, но [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies] не позволил мне получить доступ к файлам cookie HTTPOnly.

Есть ли способ добиться проверки подлинности утверждений в приложениях для iPhone без необходимости в назначенной промежуточной службе .NET для обработки проверки подлинности или от пользователя отключить свойство HTTPOnly для этих файлов cookie?

Извините, я очень новичок в SharePoint, поэтому, возможно, я даже не смотрю в правильном направлении, но я был бы признателен за любые советы о том, как заставить аутентификацию утверждений работать в приложениях iPhone. Заранее спасибо!


person user1657506    schedule 09.09.2012    source источник


Ответы (1)


Я понял это сам. Пришлось посмеяться над собственной глупостью и нетерпением.

Во-первых, [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies] ДЕЙСТВИТЕЛЬНО разрешайте вам доступ к файлам cookie HTTPOnly. Однако, когда пользователь входит в Office 365 на UIWebView, методе делегата (void)webViewDidFinishLoad:(UIWebView *)webView вызывается несколько раз, поэтому вам просто нужно подождать, пока FedAuth не появится в банке файлов cookie.

Вот моя реализация (void)webViewDidFinishLoad:(UIWebView *)webView;

- (void)webViewDidFinishLoad:(UIWebView *)webView {

    NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
    NSArray *cookiesArray = [storage cookies];
    for (NSHTTPCookie *cookie in cookiesArray) {
        if ([[cookie name] isEqualToString:@"FedAuth"]) {
            /*** DO WHATEVER YOU WANT WITH THE COOKIE ***/
            break;
        }
    }
}

После того, как вы получили файл cookie, вам просто нужно добавить его к методу NSURLRequest с помощью (void)setAllHTTPHeaderFields:(NSDictionary *)headerFields при вызове веб-служб SharePoint.

Надеюсь, это поможет кому-то.

person user1657506    schedule 21.09.2012
comment
Потрясающий! @ user1657506, можно ли получить токен FedAuth без запуска UIWebView? Создать UIView с 2 текстовыми полями (имя пользователя/пароль) и отправить HTTP-запрос к провайдеру идентификации (Google, Office 365 и т. д.), чтобы получить токен под капотом? - person surlac; 03.10.2012
comment
Извините за поздний ответ x( Подскочив к выводу, это ВОЗМОЖНО, но ОЧЕНЬ СЛОЖНО. Этот сайт может дать вам идею; Виктор Вилен - SharePoint MCA, MCM и MVP. Короче говоря, вам нужно позвонить в STS и получить куки сами Я пробовал это сам, но отказался, поэтому не могу дать вам подробностей... Кажется, есть ресурсы для .NET, которые немного упрощают этот процесс, поэтому создайте свой собственный веб-сервис с .NET для обработки аутентификации, д., может быть вариант. - person user1657506; 15.10.2012