8

我爲iPhone製作了一個簡單的SharePoint客戶端應用程序,它需要訪問某些SharePoint Web服務(主要是/_vti_bin/Lists.asmx)。我在解決如何在較新的SharePoint環境(如Office365)上執行此操作時遇到問題。在iPhone上向SharePoint索賠身份驗證

通過使用基於表單的身份驗證的舊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餅乾被附在請求。

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

根據這篇文章,與.NET應用程序,它似乎可以檢索使用的wininet.dll那些中HTTPOnly FedAuth餅乾,但我想這是不提供iPhone?

然後,我看到SharePlus應用呈現UIWebView並獲得用戶首先登錄到他們的Office365帳戶的瀏覽器屏幕上(這是相同的概念爲「啓用用戶登錄遠程認證」上述文章的部分解釋)。

因此,我試圖通過UIWebView登錄到Office365帳戶來以某種方式訪問​​這些FedAuth Cookie,但[[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]不允許我訪問HTTPOnly cookie。

有沒有一種方法可以實現iPhone應用程序的聲明身份驗證,而不需要指定的中間.NET服務來處理身份驗證,或者要求用戶關閉這些cookie的HTTPOnly屬性?

對不起,我對SharePoint非常陌生,所以我可能甚至沒有看到正確的方向,但我會很感激任何關於獲得索賠身份驗證在iPhone應用程序上工作的建議。提前致謝!

回答

2

我已經想出了自己。不得不嘲笑我自己的愚蠢和不耐煩。

首先,[[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]是否允許您訪問HTTPOnly cookie。但是,當用戶登錄到Office 365上的UIWebView,(void)webViewDidFinishLoad:(UIWebView *)webView委託方法會多次調用,因此您只需等待FedAuth出現在cookie jar中。我的(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,你只需要使用(void)setAllHTTPHeaderFields:(NSDictionary *)headerFields方法,當你打電話的SharePoint Web服務,它添加到NSURLRequest

希望這可以幫助別人。

+0

太棒了! @ user1657506,是否可以在不啓動UIWebView的情況下獲取FedAuth令牌?創建帶有2個文本字段(用戶名/密碼)的UIView,併發送HTTP請求到身份提供商(Google,Office 365等)以獲得令牌下的令牌? – surlac

+0

對不起,延遲迴復x(跳到結論,這是可能的,但很難,這個網站可能會給你一個主意; [WictorWilén - SharePoint MCA,MCM和MVP](http://www.wictorwilen.se/Post /How-to-do-active-authentication-to-Office-365-and-SharePoint-Online.aspx)。長話短說,您需要致電STS並自行獲取曲奇。我自己嘗試過,但放棄了,所以不能給你很多細節......似乎有.NET的資源,使這個過程稍微簡單一些,所以創建自己的Web服務與.NET來處理身份驗證等,可能是一個選擇。 – user1657506