Получение событий CalDAV из iCloud возвращает "403 Forbidden"
Я использую клиент SimpleCalDAV для получения событий календаря от iCloud (Apple) с помощью PHP. Этот клиент прекрасно работал, пока Apple не представила пароли для конкретных приложений. С тех пор для некоторых учетных записей в результате я всегда получаю "403 Forbidden":
Подключиться к серверу iCloud:
Заголовок запроса:
OPTIONS / HTTP/1.1
Host: p30-caldav.icloud.com
Authorization: Basic bWFxxxxmZlbGRlckBxxxxxbmNlcHQuY2xxxxxxxxxtY3pyeC15YWZxxxxxxxx3b3o=
User-Agent: cURL based CalDAV client
Accept: */*
Content-type: text/plain
Тело запроса
HTTP/1.1 200 OK
Server: AppleHttpServer/2f080fc0
Date: Sun, 21 Jan 2018 15:29:33 GMT
Content-Type: text/plain; charset=UTF-8
Content-Length: 0
Connection: keep-alive
X-Apple-Jingle-Correlation-Key: 3IAOX5DL3ZA5NGIXT57LTVFH3Q
apple-seq: 0
apple-tk: false
Apple-Originating-System: UnknownOriginatingSystem
X-Responding-Instance: caldavj:15701001:st41p57ic-qufb10212001:8501:17H89:22adb24b
Allow: ACL, COPY, DELETE, GET, HEAD, LOCK, MKCOL, MOVE, OPTIONS, PROPFIND, PROPPATCH, PUT, REPORT, UNLOCK
DAV: 1, access-control, calendar-access, calendar-schedule, calendar-auto-schedule, calendar-managed-attachments, calendarserver-sharing, calendarserver-subscribed, calendarserver-home-sync, calendar-audit, caldavserver-supports-telephone
X-Accept-Client-Encoding: gzip
Strict-Transport-Security: max-age=31536000; includeSubDomains
via: icloudedge:fr02p01ic-ztde011002:7401:17HotFix6:Frankfurt
X-Apple-Request-UUID: da00ebf4-6bde-41d6-9917-9f7eb9d4a7dc
access-control-expose-headers: X-Apple-Request-UUID
access-control-expose-headers: Via
Попытка получить события календаря:
Заголовок запроса:
REPORT /xx76669xx5/calendars/ HTTP/1.1
Host: p30-caldav.icloud.com
Authorization: Basic ZmVsZG1hcnYuc3VwcG9ydEBnbWFpbC5jb20xxxxxxxxxxXVzLWJxbWxxxxxxxxxxxxreg==
User-Agent: cURL based CalDAV client
Accept: */*
Content-type: text/xml
Depth: 1
Content-Length: 367
Тело запроса:
<?xml version="1.0" encoding="utf-8" ?>
<C:calendar-query xmlns:D="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav">
<D:prop>
<C:calendar-data/>
<D:getetag/>
</D:prop><C:filter>
<C:comp-filter name="VCALENDAR">
<C:comp-filter name="VEVENT">
<C:time-range start="20180115T000000Z" end="20180121T235959Z"/>
</C:comp-filter>
</C:comp-filter>
</C:filter>
</C:calendar-query>
Заголовок ответа:
HTTP/1.1 403 Forbidden
Server: AppleHttpServer/2f080fc0
Date: Sun, 21 Jan 2018 15:49:26 GMT
Content-Type: text/plain; charset=UTF-8
Content-Length: 9
Connection: keep-alive
X-Apple-Jingle-Correlation-Key: QI5L3MI7AJD6ZONONAAGCMBXZ4
apple-seq: 0
apple-tk: false
Apple-Originating-System: UnknownOriginatingSystem
X-Responding-Instance: caldavj:33000101:mr21p30ic-hpaf07173601:8501:17H89:22adb24b
DAV: 1, access-control, calendar-access, calendar-schedule, calendar-auto-schedule, calendar-audit, caldavserver-supports-telephone, calendar-managed-attachments, calendarserver-sharing, calendarserver-subscribed, calendarserver-home-sync
Strict-Transport-Security: max-age=31536000; includeSubDomains
via: icloudedge:fr02p00ic-ztde011131:7401:17HotFix6:Frankfurt
X-Apple-Request-UUID: 823abdb1-1f02-47ec-b9ae-6800613037cf
access-control-expose-headers: X-Apple-Request-UUID
access-control-expose-headers: Via
Тело ответа:
Forbidden
Что я нахожу странным, так это то, что я могу подключиться к серверу (войти в систему) и получить ответ 200, что означает, что я смог войти в iCloud. Кажется, это специфическая проблема для учетной записи пользователя. Он работает на моей учетной записи Apple, но не на моем друге. В чем может быть эта проблема?
Любая подсказка высоко ценится.
1 ответ
Согласно этому:
Ответы кода состояния HTTP 403 являются результатом того, что веб-сервер настроен так, чтобы клиенту было отказано в доступе к запрошенному ресурсу.
Я ожидаю, что, возможно, ваш друг не разрешил вам получить доступ к его личному календарю.
Он должен поделиться своим календарем с вами (пригласить вас для просмотра календаря), прежде чем вы сможете получить доступ к данным календаря с вашей учетной записью.
И согласно этой документации, календарь не может быть установлен как "Публичный" в то же время.
Наконец, вы также можете дважды проверить, не связана ли ошибка 403 с этой проблемой на стороне вашего друга (слишком много учетных записей iCloud)
Также обратите внимание, что если вы хотите использовать стороннее приложение со своей учетной записью iCloud, вам необходимо включить двухфакторную аутентификацию и сгенерировать индивидуальные пароли для каждого приложения.