Cocoa 如何处理NSURLauthenticationMethodsMobileMeauthToken?

Cocoa 如何处理NSURLauthenticationMethodsMobileMeauthToken?,cocoa,icloud,nsurlsession,Cocoa,Icloud,Nsurlsession,我们正在使用一个NSURLSessionDataDelegate,并实现了以下委托方法: - (void) URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSU

我们正在使用一个
NSURLSessionDataDelegate
,并实现了以下委托方法:

- (void) URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential *))completionHandler { ... }
我们经常发现iCloud用户收到一个
nsurAuthenticationMethodsMobileMeauthToken
质询。发回拒绝不起作用(因为服务器不会尝试另一个挑战),发回接受

completionHandler(NSURLSessionAuthChallengeUseCredential,凭证)

也不行


我们应该如何处理这种身份验证质询类型?其他人看到了吗?

对于您没有明确处理的任何保护空间,或者对于您不了解的任何凭据类型,您通常应该使用
NSURLSessionAuthChallengePerformDefaultHandling
(凭据被忽略,但通常通过
nil
)告诉操作系统像未提供身份验证委托方法一样处理凭据。

与这些调用关联的保护空间是什么样子的?您是否尝试过使用NSURLSessionAuthChallengePerformDefaultHandling和nil调用完成处理程序以获取凭据?使用如何凭据的NSURLSessionAuthChallengeRejectProtectionSpace和nil?如果是这样的话,您的代理是否应该在下一个身份验证投影空间中再次被调用?问题是-我已经尝试了这一切的组合,但它不会消失。就在最近,我想我知道这可能是什么。本质上,由于重新定向,请求中可能缺少“授权”标头,因此,如果没有该标头,iCloud将发送MobileMe令牌身份验证质询,而不发送其他内容。拦截重定向,然后再次添加授权标头似乎已经“修复”了这一问题。您正在访问哪些服务器?cadav.icloud.comAh。这是有道理的。我假设您在初始请求期间手动注入了auth头?那么,是的,正确的解决方案是在获得重定向时也更改
NSURLRequest
,以确保这些重定向中也包含auth头。