刷新响应后调试 Sonos 错误
Debugging Sonos error after refresh response
我构建的 Sonos Music API (SMAPI) 实施工作正常。我可以 select playlists/albums 并使用 customsd.html 播放曲目。但是几分钟后,Sonos 应用程序失败并告诉我 "Trial period expired"(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。
- Controller发送带有token B的请求,一切正常!
- 接下来发生的事情是:Player 发送带有令牌 A 的请求,令牌 A 已被撤销,因此我们被迫发回未经授权的令牌错误。
- 进程卡住了,因为Player一直在请求token A。错误!我们无法刷新已撤销的令牌!
如何继续使用已撤销的授权令牌?
玩家执行自己的令牌刷新流程。只要您正确地处理了刷新流程,事情就会解决。如果您发现令牌已过期,只需刷新它即可,无论客户端如何。
顺便说一句,如果玩家确实获得了刷新令牌,它会将其传递给控制器。相反的情况不会发生(如您所见)。
我构建的 Sonos Music API (SMAPI) 实施工作正常。我可以 select playlists/albums 并使用 customsd.html 播放曲目。但是几分钟后,Sonos 应用程序失败并告诉我 "Trial period expired"(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。
- Controller发送带有token B的请求,一切正常!
- 接下来发生的事情是:Player 发送带有令牌 A 的请求,令牌 A 已被撤销,因此我们被迫发回未经授权的令牌错误。
- 进程卡住了,因为Player一直在请求token A。错误!我们无法刷新已撤销的令牌!
如何继续使用已撤销的授权令牌?
玩家执行自己的令牌刷新流程。只要您正确地处理了刷新流程,事情就会解决。如果您发现令牌已过期,只需刷新它即可,无论客户端如何。
顺便说一句,如果玩家确实获得了刷新令牌,它会将其传递给控制器。相反的情况不会发生(如您所见)。