Ошибка отладки Sonos после обновления ответа - PullRequest
0 голосов
/ 16 декабря 2018

Созданная мною реализация Sonos Music API (SMAPI) работает нормально.Я могу выбирать плейлисты / альбомы и воспроизводить треки с помощью customsd.html.Но через пару минут приложение Sonos дает сбой и сообщает мне «Испытательный период истек» (сообщение об ошибке Sonos Client.LoginUnauthorized).

Я веду журнал ошибок, который отслеживает все запросы Sonos на сервере.В нем вы можете видеть, что в 21:39:54 токен обновления (Client.TokenRefreshRequired) отправляется обратно, и последующий запрос использует этот токен аутентификации для авторизации запроса getLastUpdate.Следующий запрос не выполняется, поскольку он использует недействительный токен авторизации.

2018-12-15 21:39:19.680877:  server gets request: getMediaURI
2018-12-15 21:39:19.681059:  user agent: ["Linux UPnP\/1.0 Sonos\/47.2-59120 (ZP90)"]
2018-12-15 21:39:19.767269:  AUTHORIZE REQUEST starting with token: 26052eec7baed95cf51bb497acb74445e7f3f86c
2018-12-15 21:39:20.022666:  Successfully ended getMediaURI

2018-12-15 21:39:54.861666:  server gets request: getLastUpdate
2018-12-15 21:39:54.861842:  user agent: ["Linux UPnP\/1.0 Sonos\/47.2-59120 (WDCR:Microsoft Windows NT 10.0.17134)"]
2018-12-15 21:39:54.953047:  AUTHORIZE REQUEST starting: with token: 26052eec7baed95cf51bb497acb74445e7f3f86c
2018-12-15 21:39:55.177064:  Sending refreshed access token. token 93467644b3c00ec738a06f41abb44f5925977da6

2018-12-15 21:39:55.997627:  server gets request: getLastUpdate
2018-12-15 21:39:55.998382:  user agent: ["Linux UPnP\/1.0 Sonos\/47.2-59120 (WDCR:Microsoft Windows NT 10.0.17134)"]
2018-12-15 21:39:56.111795:  AUTHORIZE REQUEST starting with token: 93467644b3c00ec738a06f41abb44f5925977da6
2018-12-15 21:39:56.338871:  Successfully ended getLastUpdate

2018-12-15 21:40:10.834301:  server gets request: getMediaURI
2018-12-15 21:40:10.834675:  user agent: Linux UPnP\/1.0 Sonos\/47.2-59120 (ZP90)
2018-12-15 21:40:10.928440:  AUTHORIZE REQUEST starting with token: 26052eec7baed95cf51bb497acb74445e7f3f86c
2018-12-15 21:40:10.940039:  FAILED AUTHENTICATION

Проверка подлинности завершается неудачно при вызове в 21:40:10.Этот вызов сделан пользовательским агентом, заканчивающимся (ZP90), который, как я полагаю, является моим физическим игроком в Sonos.Обновленный токен доступа отправляется агенту пользователя, оканчивающемуся на (WDCR: Microsoft Windows NT 10.0.17134);предположительно мое настольное приложение Sonos?.

Это нормально, что два разных агента пользователя вызывают сервис?если да, то как бороться с устаревшими токенами авторизации?Должна ли быть задержка в истечении срока их действия?если да, то как долго должна быть эта задержка?

РЕДАКТИРОВАТЬ: Мой поток:

  1. Запрос отправляется с токеном A контроллером.
  2. Мой сервер авторизации сообщает, что срок его действия истек, отзывает токен A и отправляет обратно новый токен B.
  3. Контроллер отправляет запросы с токеном B, все в порядке!
  4. Следующая вещьэто происходит: проигрыватель отправляет запрос с токеном A, который был отозван, поэтому мы вынуждены отправить обратно несанкционированную ошибку токена.
  5. Процесс застревает, поскольку проигрыватель продолжает запрашивать токен A. Ошибка!Мы не можем обновить отозванный токен!

Как продолжить работу с отозванными токенами авторизации?

1 Ответ

0 голосов
/ 17 декабря 2018

Игрок выполняет свой собственный процесс обновления токена.Пока вы правильно обрабатываете процесс обновления, все будет хорошо.Если вы заметили токен с истекшим сроком действия, просто обновите его, независимо от клиента.

Кроме того, если игрок получит токен обновления, он передаст его контроллеру.Обратного не происходит (как вы заметили).

...