Я использую 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, но не на моем другом. В чем может быть эта проблема?
Любая подсказка высоко ценится.
В соответствии с этот:
Ответы кода состояния HTTP 403 являются результатом того, что веб-сервер сконфигурирован так, чтобы запретить клиенту доступ к запрошенному ресурсу.
Я ожидаю, что, возможно, ваш друг не разрешил вам получить доступ к его личному календарю.
Он должен поделиться своим календарем с вами (пригласить вас для просмотра календаря), прежде чем вы сможете получить доступ к данным календаря с вашей учетной записью.
И согласно эта документация, календарь не может быть установлен как «Публичный» в то же время.
Наконец, вы также можете дважды проверить, не связана ли ошибка 403 с этот вопрос на стороне вашего друга (Слишком много учетных записей iCloud)
Также обратите внимание, что если вы хотите использовать стороннее приложение со своей учетной записью iCloud, вам придется включить двухфакторную аутентификацию и сгенерировать индивидуальные пароли для каждого приложения.
Других решений пока нет …