8

いくつかの SharePoint Web サービス (主に /_vti_bin/Lists.asmx) へのアクセスを必要とする iPhone 用の単純な SharePoint クライアント アプリを作成しました。Office365 などの新しい SharePoint 環境でこれを行う方法がわかりません。

didReceiveAuthenticationChallengeフォーム ベースの認証を使用する古い BPOS 環境では、メソッドを実装するだけでこれらのサービスに対して認証を行うことができました。

-(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 Apps では WININET.dll を使用してこれらの HTTPOnly FedAuthCookie を取得できるようですが、iPhone では使用できないのでしょうか?

次に、SharePlusアプリUIWebViewが表示され、最初にブラウザ画面でユーザーが Office365 アカウントにログインするのを見ました (これは、上記の記事の「リモート認証のためのユーザー ログインの有効化」セクションで説明したのと同じ概念です)。

そのため、経由でFedAuthOffice365 アカウントにログインしてこれらの Cookie にアクセスできるかどうかを確認しようとしましたが、 HTTPOnly Cookie にアクセスできませんでした。UIWebView[[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]

認証を処理するための指定された中間 .NET サービスを必要とせずに、またはユーザーがそれらの Cookie の HTTPOnly プロパティをオフにすることを要求せずに、iPhone アプリでクレーム認証を実現する方法はありますか?

申し訳ありませんが、私は SharePoint に非常に慣れていないため、正しい方向を見ていない可能性さえありますが、iPhone アプリでクレーム認証を機能させるためのアドバイスをいただければ幸いです。前もって感謝します!

4

1 に答える 1

2

私はこれを自分で理解しました。自分の愚かさとせっかちさを笑わなければなりませんでした。

まず、[[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]DO は HTTPOnly Cookie にアクセスできるようにします。ただし、ユーザーが で Office 365 にログインするとUIWebView(void)webViewDidFinishLoad:(UIWebView *)webViewdelegate メソッドが数回呼び出されるため、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 を取得したら、SharePoint Web サービスを呼び出すときに、それNSURLRequestを usingメソッドに追加するだけです。(void)setAllHTTPHeaderFields:(NSDictionary *)headerFields

これが誰かに役立つことを願っています。

于 2012-09-21T12:04:30.137 に答える