无法从苹果 caldav 服务器获取用户的“当前用户主体”

Posted

技术标签:

【中文标题】无法从苹果 caldav 服务器获取用户的“当前用户主体”【英文标题】:Not able to get 'current-user-principal' for user from apple caldav server 【发布时间】:2019-09-13 08:54:47 【问题描述】:

我正在尝试从苹果 caldav 服务器获取当前用户主体,并从苹果获取 400 错误。几天前它还在工作,不确定苹果方面是否有任何改变,因为我们没有改变任何东西。

问题仅与获取当前用户主体的请求有关,而其他请求工作正常。我注意到一件奇怪的事情,在其他请求中,如果我不通过凭据,他们给出了 401,而在这种情况下,这个请求给出了 400。请求的 url 是https://p58-caldav.icloud.com,它在浏览器中打开时给出 400,而过去它在浏览器中打开时要求提供凭据。我通过添加凭据的授权标头来满足邮递员的请求,还尝试添加标头深度:1。如果我也删除深度标题,它也不起作用。

URL : https://p58-caldav.icloud.com Method : PROPFIND Content-Type: text/xml Request Body: <A:propfind xmlns:A='DAV:'><A:prop><A:current-user-principal/></A:prop></A:propfind>

预期结果应包含包含当前用户原则的 xml。 实际结果是 400 错误。

【问题讨论】:

我从昨天开始就在同一条船上,收到“远程服务器返回错误:(400)错误请求。” @paul-2011 有没有办法追踪它。 我向 Apple 提交了一张票,不知道他们什么时候会对此有所了解。让我吃惊的是,他们怎么能从无到有地打破这样的东西。 【参考方案1】:

2019 年 9 月 16 日更新:似乎端点的功能已恢复,因此您无需应用以下解决方案

这是一个临时解决方案n,以便在破损期间度过难关。请仔细阅读并自行承担使用风险

我观察到 contacts.icloud.comcaldav.icloud.com 存在同样的问题,即现在返回 400。

经过一番摆弄后,我发现如果您在 .com 之后添加单个路径,这些端点仍然可以工作(至少对于从您可以继续前进的地方检索主体并像以前一样毫无问题地使用它们)。您可以在最后添加例如/co

(但现在只要是单一路径,任何东西都可以工作,即使是 /tangerine /apricot/acorn,但让我们使用 /co。)

因此,以下端点现在可以工作:

https://contacts.icloud.com/co https://caldav.icloud.com/co

(或者对于 OP 在问题中使用的特定端点,请尝试 https://p58-caldav.icloud.com/co - 例如,我成功使用了 https://pXX-contacts.icloud.com/co(将 pXX 替换为您的服务器编号),尽管我建议此类发现使用更通用的端点contactscaldav.)

警告:那些围绕端点的工作并不能就地替代旧端点的所有用法。例如,以它们为基础,如下例所示将不起作用https://caldav.icloud.com/co/hidden-personal-id/principal/

您仍然可以在上述情况下使用旧端点(这将起作用): https://caldav.icloud.com/hidden-personal-id/principal/

我附上邮递员请求的屏幕截图,因为它们现在正在工作:

免责声明:上述端点在本文发布时有效,但由于 Apple 已经破坏了原始端点,因此无法保证这些端点将继续工作多长时间或它们将按预期工作。我给你这个解决方案是为了让你在 Apple 解决问题之前度过难关,但使用它们需要你自担风险。

【讨论】:

你是个天才!

以上是关于无法从苹果 caldav 服务器获取用户的“当前用户主体”的主要内容,如果未能解决你的问题,请参考以下文章

列出caldav目录时访问禁止错误

列出CalDAV(Bedework)上可供用户使用的日历

ICloud Caldav连接获取日历

iCloud Caldav 连接以获取日历

CalDAV 请求 gGt iCloud 日历事件

14 - 苹果远程推送原理