IOS, отправляющий push с APNs Auth Key: вдруг "403 Запрещено: {" reason ":" InvalidProviderToken "}
Я отправляю свои push-уведомления с помощью APNs Auth Key ( "никогда не истекает" ), который работал хорошо, пока я не получил
403 Forbidden: {"reason":"InvalidProviderToken"}
в качестве ответа при отправке push-уведомлений. Что могло быть причиной этого, когда он работал один раз, и вдруг это не без истечения срока? Тем временем он снова работал для некоторых нажатий, но теперь я снова получаю ошибку... Кто-нибудь еще испытал это?
ИЗМЕНИТЬ
Не уверен, но похоже, что это происходит только на сервере Ubuntu, а не на моей локальной (OS X) машине...
Ответы
Ответ 1
Я видел это в нескольких обстоятельствах:
-
Повторная подача токенов с истекшим поставщиком, похоже, занесена в черный список и приводит к последующим отклонениям InvalidProviderToken
, а не отклонениям ExpiredProviderToken
. Проверьте, что вы делаете журналы для сообщений об истечении срока годности. Проверьте свои системные часы, чтобы убедиться, что вы не генерируете токены с перекошенными отметками времени.
-
Отправка недопустимых тем приведет к недействительности всех токенов поставщика в соединении (даже ранее действительных). Только отправьте темы, к которым привязан ключ, и используйте только один ключ для каждого соединения.
Ответ 2
Сервер отвечает с ошибкой InvalidToken и/или ExpiredToken. Ваш токен аутентификации не должен содержать никаких "=", "+", "-", "Двойная проверка", если ваш токен не имеет этого. Также подпись (третья часть токена должна быть закодирована Base64URL, поэтому без предыдущих символов).
Ответ 3
мы имеем точно такую же проблему при отправке нажатий на разные идентификаторы команд с помощью того же соединения. Шаги для воспроизведения:
-
Откройте соединение с APNS и используйте те же соединения, чтобы:
-
Отправьте токен на основе push в тему com.companyA.xxx
идентификатора команды 1234
: APNS принимает и доставляет нажатие успешно.
- Отправьте токены на основе темы
io.companyB.xxx
идентификатора команды 5678
: APNS отвечает HTTP 400 BadRequest The device token does not match the specified topic
- Повторно отправить токен на тему
io.companyB.xxx
идентификатора команды 5678
: APNS отвечает HTTP 403 Forbidden: the provider token is not valid or the token signature could not be verified
.
После этого становится невозможным отправить любое нажатие, и соединение должно быть закрыто и снова открыто.
Обходной путь, который мы завершили, - это открыть одно соединение для каждой команды id. Документация APNS не упоминает ничего подобного, поэтому я рассматриваю это как ошибку, и я открыл отчет об ошибке.
Ответ 4
для меня серверное время было недействительным, исправление серверного времени решило проблему
Ответ 5
Для меня была проблема с плохой конфигурацией. Я использовал неправильный идентификатор команды. Пожалуйста, убедитесь, что все настройки верны, прежде чем искать какие-либо другие решения.
Ответ 6
Я использовал имя ключа вместо идентификатора ключа. Проверка на https://developer.apple.com/account/resources/authkeys/review/ показала правильное значение.
Ответ 7
Apple APN documentation говорит:
APN поддерживает только токены аутентификации поставщика, которые подписаны с алгоритм ES256. Необеспеченные JWTs [JSON Web Tokens] или JWT подписали с другими алгоритмами, отклоняются, и ваш сервер поставщика получает ответ InvalidProviderToken (403).
Итак, похоже, что проблема не в вашей авторизации; это на самом деле проблема с веб-маркером, который был создан из вашего ключа.