8

Zrobiłem prostą aplikację klienta SharePoint dla iPhone'a, która wymaga dostępu do niektórych usług sieciowych SharePoint (głównie /_vti_bin/Lists.asmx). Mam problem z ustaleniem, jak to zrobić w nowszym środowisku SharePoint, takim jak Office365.Uwierzytelnianie Uwierzytelnianie na SharePoint na iPhonie

W starym środowisku BPOS z uwierzytelnianiem opartym na formularzach udało mi się uwierzytelnić te usługi, po prostu wdrażając metodę didReceiveAuthenticationChallenge;

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

To oczywiście nie działa dłużej z witryn SharePoint konieczności uwierzytelniania zastrzeżeń, więc zrobiłem kilka badań i okazało się, że muszę FedAuth cookies, aby być dołączone do wniosku.

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

Zgodnie z tym artykułem, w .NET Apps, wydaje się możliwe, aby odzyskać te HttpOnly FedAuth ciasteczka korzystając WININET.DLL, ale myślę, że nie jest dostępna na iPhone?

Następnie zobaczyłem SharePlus aplikację prezentującą UIWebView i umożliwiającą użytkownikowi zalogowanie się na swoje konto Office365 na ekranie przeglądarki (co jest tym samym pojęciem, co wyjaśniono w sekcji "Włączanie logowania użytkownika do zdalnego uwierzytelniania" w powyższym artykule).

Więc starałem się sprawdzić, czy mogę jakoś uzyskać dostęp do tych FedAuth ciasteczek logując się na koncie za pośrednictwem UIWebView Office 365, ale [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies] nie pozwolił mi dostęp HttpOnly plików cookie.

Czy istnieje sposób na uzyskanie uwierzytelnienia roszczeń w aplikacjach na iPhone'a bez potrzeby korzystania z pośredniej usługi .NET do obsługi uwierzytelniania lub wymagającej od użytkownika wyłączenia właściwości HTTPOnly na tych plikach cookie?

Przepraszam, jestem bardzo nowy w SharePoint, więc może nawet nie patrzę w dobrym kierunku, ale byłbym wdzięczny za wszelkie porady dotyczące uwierzytelniania roszczeń do pracy w aplikacjach na iPhone'a. Z góry dziękuję!

Odpowiedz

2

Sam to wymyśliłem. Musiałem się śmiać z własnej głupoty i niecierpliwości.

Przede wszystkim, [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies] Daj dostęp do plików cookie HTTPOnly. Jednak, gdy użytkownik loguje się do usługi Office 365 przy użyciu metody delegatów UIWebView, (void)webViewDidFinishLoad:(UIWebView *)webView, należy zadzwonić kilka razy, więc po prostu trzeba poczekać, aż FedAuth pojawi się w słoiku plików cookie.

Oto moja implementacja (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; 
     } 
    } 
} 

Po otrzymaniu cookie, wystarczy dołączyć do NSURLRequest że używając (void)setAllHTTPHeaderFields:(NSDictionary *)headerFields metody można nazwać SharePoint usług internetowych.

Mam nadzieję, że to komuś pomaga.

+0

Awesome! @ user1657506, czy można uzyskać token FedAuth bez uruchamiania interfejsu UIWebView? Utwórz UIView z 2 polami tekstowymi (nazwa użytkownika/hasło) i wyślij żądanie HTTP do Dostawcy Tożsamości (Google, Office 365 itp.), Aby token był pod maską? – surlac

+0

Przepraszamy za spóźnioną odpowiedź x (Przeskakiwanie do wniosku, jest to MOŻLIWE, ale BARDZO TRUDNE Ta strona może dać ci pomysł; [Wictor Wilen - SharePoint MCA, MCM i MVP] (http://www.wictorwilen.se/Post /How-to-do-active- authenthentication-to-Office-365-and-SharePoint-Online.aspx).Krótko mówiąc, musisz zadzwonić do STS i samemu zdobyć ciasteczka. Próbowałem tego sam, ale zrezygnowałem, więc nie mogę podać wiele szczegółów ... Wydaje się, że są zasoby dla .NET, który sprawia, że ​​proces ten jest nieco łatwiejszy, więc tworzenie własnego webservice z .NET do obsługi uwierzytelniania, itp., może być opcją. – user1657506

Powiązane problemy