Созданная мною реализация 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?.
Это нормально, что два разных агента пользователя вызывают сервис?если да, то как бороться с устаревшими токенами авторизации?Должна ли быть задержка в истечении срока их действия?если да, то как долго должна быть эта задержка?
РЕДАКТИРОВАТЬ: Мой поток:
- Запрос отправляется с токеном A контроллером.
- Мой сервер авторизации сообщает, что срок его действия истек, отзывает токен A и отправляет обратно новый токен B.
- Контроллер отправляет запросы с токеном B, все в порядке!
- Следующая вещьэто происходит: проигрыватель отправляет запрос с токеном A, который был отозван, поэтому мы вынуждены отправить обратно несанкционированную ошибку токена.
- Процесс застревает, поскольку проигрыватель продолжает запрашивать токен A. Ошибка!Мы не можем обновить отозванный токен!
Как продолжить работу с отозванными токенами авторизации?