8

Ho creato una semplice applicazione client SharePoint per iPhone, che richiede l'accesso ad alcuni servizi Web di SharePoint (principalmente /_vti_bin/Lists.asmx). Sto avendo difficoltà a capire come farlo sul nuovo ambiente SharePoint come Office365.Autenticazione delle attestazioni su SharePoint su iPhone

Con il vecchio ambiente BPOS con autenticazione basata su form, sono stato in grado di autenticare tali servizi semplicemente implementando il metodo didReceiveAuthenticationChallenge;

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

Questo, ovviamente, non ha funzionato più con siti di SharePoint con autenticazione basata sulle attestazioni, così ho fatto qualche ricerca e ha scoperto che ho bisogno FedAuth cookie da allegare alla richiesta.

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

Secondo questo articolo, con NET Apps, sembra possibile recuperare quei HttpOnly FedAuth cookie utilizzando wininet.dll, ma immagino che non è disponibile su iPhone?

Poi, ho visto SharePlus App presentando UIWebView e sempre all'utente di accedere al proprio conto Office365 prima sullo schermo del browser (che è lo stesso concetto come spiegato in "Abilitazione Login Utente per l'autenticazione remota" del articolo di cui sopra).

Così, ho provato a vedere se posso in qualche modo ottenere l'accesso a quei FedAuth cookie accedendo al Office365 conto tramite UIWebView, ma [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies] non mi ha lasciato l'accesso HttpOnly cookie.

Esiste un modo per ottenere l'autenticazione delle attestazioni sulle app per iPhone senza richiedere un servizio .NET intermedio designato per la gestione delle autenticazioni o che richiede all'utente di disattivare la proprietà HTTPOnly su tali cookie?

Scusate, sono molto nuovo per SharePoint, quindi forse non sto nemmeno guardando nella giusta direzione, ma gradirei qualsiasi consiglio su come far funzionare l'autenticazione delle attestazioni su app per iPhone. Grazie in anticipo!

risposta

2

L'ho capito da solo. Dovevo ridere della mia stupidità e impazienza.

Prima di tutto, [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies] DO consente di accedere ai cookie HTTPOnly. Tuttavia, quando l'utente accede a Office 365 sul metodo UIWebView, (void)webViewDidFinishLoad:(UIWebView *)webView delegato viene chiamato più volte, quindi è necessario attendere fino a quando FedAuth non viene visualizzato nel contenitore dei cookie.

Ecco la mia implementazione (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; 
     } 
    } 
} 

Una volta ottenuto il cookie, basta per aggiungere che al NSURLRequest utilizzando (void)setAllHTTPHeaderFields:(NSDictionary *)headerFields metodo quando si chiama servizi Web di SharePoint.

Spero che questo aiuti qualcuno.

+0

Fantastico! @ user1657506, è possibile ottenere token FedAuth senza avviare UIWebView? Crea UIView con 2 campi di testo (nome utente/password) e invia la richiesta HTTP al provider di identità (Google, Office 365, ecc.) Per ottenere il token sotto controllo? – surlac

+0

Scusate per la risposta in ritardo x (Saltando alla conclusione, è POSSIBILE ma MOLTO DIFFICILE. Questo sito può darvi un'idea; [Wictor Wilén - SharePoint MCA, MCM e MVP] (http://www.wictorwilen.se/Post /How-to-do-active-authentication-to-Office-365-and-SharePoint-Online.aspx).Per farla breve, è necessario chiamare STS e ottenere i cookie da soli. L'ho provato io stesso ma ho rinunciato quindi non posso darti molti dettagli ... Sembra che ci siano risorse per .NET che rendono questo processo leggermente più semplice, quindi crea il tuo webservice con .NET per gestire l'autenticazione, ecc. potrebbe essere un'opzione. – user1657506