应该如何处理 NSURLAuthenticationMethodXMobileMeAuthToken?

Posted

技术标签:

【中文标题】应该如何处理 NSURLAuthenticationMethodXMobileMeAuthToken?【英文标题】:How should one handle NSURLAuthenticationMethodXMobileMeAuthToken? 【发布时间】:2018-11-13 18:47:25 【问题描述】:

我们使用NSURLSessionDataDelegate 并实现了以下委托方法:

- (void) URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential *))completionHandler  ... 

我们经常发现 iCloud 用户会收到NSURLAuthenticationMethodXMobileMeAuthToken 质询。发回拒绝不起作用(因为服务器不会尝试另一个挑战)并用

发回接受

completionHandler(NSURLSessionAuthChallengeUseCredential, credential);

也不行。

我们应该如何处理这种身份验证质询类型?有人看过吗?

【问题讨论】:

与这些调用相关的 protectionSpace 是什么样的? 你试过用 NSURLSessionAuthChallengePerformDefaultHandling 和 nil 调用完成处理程序吗? 如何使用 NSURLSessionAuthChallengeRejectProtectionSpace 和 nil 作为凭证​​?如果是这样,您的委托是否应该使用下一个身份验证投影空间再次调用? 【参考方案1】:

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

【讨论】:

问题是 - 我已经尝试了这个和其他任何东西的所有组合,但它不会消失。就在最近,我想我知道这可能是什么。本质上,由于重定向,请求中可能缺少“授权”标头,因此,当该标头不存在时,iCloud 会发送 MobileMe 令牌身份验证挑战,仅此而已。拦截重定向然后重新添加授权标头似乎已经“修复”了这个问题。 你在打什么服务器? cadav.icloud.com 啊。现在这是有道理的。我假设您在初始请求期间手动注入了 auth 标头?那么是的,正确的解决方案是在获得重定向时也更改NSURLRequest,以确保身份验证标头也包含在其中。

以上是关于应该如何处理 NSURLAuthenticationMethodXMobileMeAuthToken?的主要内容,如果未能解决你的问题,请参考以下文章

我应该如何处理“'someFunction' 不是从 'namespace:somePackage' 导出的对象”错误? [关闭]

我们应该如何处理高度相关的特征?

你应该如何处理 UIAlertAction 的闭包参数

我应该如何处理包中的头文件?

我应该如何处理 RESTful API 中的对象层次结构?

关于颠覆,我应该如何处理供应商目录?