【问题标题】:Claims Authentication to SharePoint on iPhone向 iPhone 上的 SharePoint 声明身份验证
【发布时间】:2012-09-09 01:59:56
【问题描述】:

我为 iPhone 制作了一个简单的 SharePoint 客户端应用程序,它需要访问一些 SharePoint Web 服务(主要是 /_vti_bin/Lists.asmx)。我无法弄清楚如何在 Office365 等较新的 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 cookie 附加到请求中。

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

根据这篇文章,使用 .NET 应用程序,似乎可以使用 WININET.dll 检索那些 HTTPOnly FedAuth cookie,但我想这在 iPhone 上不可用?

然后,我看到SharePlus 应用程序显示UIWebView 并让用户首先在浏览器屏幕上登录到他们的Office365 帐户(这与文章的“启用用户登录以进行远程身份验证”部分中解释的概念相同)以上)。

所以,我尝试通过UIWebView 登录Office365 帐户来查看是否可以通过某种方式访问​​那些FedAuth cookie,但是[[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies] 不允许我访问HTTPOnly cookie。

有没有一种方法可以在 iPhone 应用程序上实现声明身份验证,而不需要指定的中间 .NET 服务来处理身份验证,或者要求用户关闭这些 cookie 上的 HTTPOnly 属性?

抱歉,我对 SharePoint 还很陌生,所以我什至可能没有找到正确的方向,但如果有任何关于让声明身份验证在 iPhone 应用程序上工作的建议,我将不胜感激。提前致谢!

【问题讨论】:

    标签: iphone ios sharepoint sharepoint-2010 claims-based-identity


    【解决方案1】:

    我自己已经弄清楚了。不得不嘲笑我自己的愚蠢和不耐烦。

    首先,[[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies] 允许您访问 HTTPOnly cookie。不过,当用户在 UIWebView 上登录 Office 365 时,(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 后,只需在调用 SharePoint Web 服务时使用 (void)setAllHTTPHeaderFields:(NSDictionary *)headerFields 方法将其附加到 NSURLRequest

    希望这对某人有所帮助。

    【讨论】:

    • 太棒了! @user1657506,是否可以在不启动 UIWebView 的情况下获取 FedAuth 令牌?创建带有 2 个文本字段(用户名/密码)的 UIView,并向身份提供者(Google、Office 365 等)发送 HTTP 请求以获取令牌?
    • 抱歉回复晚了 x( 得出结论,这是可能的,但非常困难。这个网站可能会给你一个想法;Wictor Wilén - SharePoint MCA, MCM and MVP。长话短说,你需要打电话给 STS 并获得cookie自己。我自己尝试过但放弃了,所以不能给你太多细节......似乎有.NET的资源可以让这个过程稍微容易一些,所以用.NET创建你自己的web服务来处理身份验证,等等,可能是一种选择。
    猜你喜欢
    • 2012-12-24
    • 1970-01-01
    • 1970-01-01
    • 2012-12-24
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    相关资源
    最近更新 更多