Sonos SMAPI:getLastUpdate 和 getMediaUri 响应中忽略了 AuthTokenExpired 故障
Sonos SMAPI : AuthTokenExpired faults ignored in getLastUpdate and getMediaUri response
我们正在整合 Sonos API。
我们选择不实施令牌刷新,因此我们的令牌会持续 1 年,直到用户必须再次重新授权。
在我的测试期间,当浏览时出现 AuthTokenExpired 故障(响应 getMetadata)时,我成功地获得了重新授权弹出窗口。
但是每次从对 getMediaMetadata 的调用中 return 出现故障时,我都会收到默认错误消息 "Unable to play the radio station"。我希望看到重新授权弹出窗口。
引用自Sonos documentation about authentication tokens:
If you do not implement refresh tokens, when the token expires, return the Client.AuthTokenExpired fault to indicate the user must manually log in and authenticate again. The Log-Message is a string placed in the log messages for this fault code.
这是我们的 SMAPI 服务器和 Sonos application/speaker 之间有问题的对话:
31/03/2020 14:24:27 641 SonosApi Request http://www.sonos.com/Services/1.1#getMediaMetadata "<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<credentials xmlns="http://www.sonos.com/Services/1.1">
<deviceId>78-28-CA-9F-86-8E:8</deviceId>
<deviceProvider>Sonos</deviceProvider>
<loginToken>
<token>1fa35465a-6bbc-4cf4-b46f-0e12be5b3216</token>
<householdId>Sonos_W6VyCDwgI8ZadAWceKQ1avPrtd</householdId>
</loginToken>
</credentials>
<To s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://dev8.local.st-corp.fr:8001/SonosService.svc</To>
<Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://www.sonos.com/Services/1.1#getMediaMetadata</Action>
</s:Header>
<s:Body>
<getMediaMetadata xmlns="http://www.sonos.com/Services/1.1">
<id>14740</id>
</getMediaMetadata>
</s:Body>
</s:Envelope>"
31/03/2020 14:24:27 875 SonosApi Reply "<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header />
<s:Body>
<s:Fault>
<faultcode>s:Client.AuthTokenExpired</faultcode>
<faultstring xml:lang="fr-FR">The token is expired</faultstring>
</s:Fault>
</s:Body>
</s:Envelope>"
编辑:
参考更新后的文档和您的回答,我应该 return 在调用 getMetadata 和 getMediaUri 时出现 AuthTokenExpired 错误。
但是知道访问令牌已过期,我应该如何回答对 getMediaMetadata 的调用?
查看我的消息日志,我看到当用户单击可流项目时,将按以下顺序进行以下调用:
- getMediaMetadata(知道令牌已经过期的答案是什么?)
- getMediaUri(此处应处理AutTokenExpired)
如果我错了请纠正我,但为了建立对 getMediaUri 的调用,Sonos 客户端使用了上次调用 getMediaMetadata 时得到的 ID returned,我无法提供它,因为令牌已经过期了。在 getMediaMetadata 中先处理 AuthTokenExpired 不是更好吗?
此致
浏览 (getMetadata
) 和 getMediaURI
调用将遵循 AuthTokenExpired
错误。这些调用的重新授权流程如 Use authentication tokens 文档的 刷新过期身份验证令牌 部分所述。我将更新文档以反映这一点。
如果这不起作用,请提交诊断以对其进行调试。有关说明,请参阅 support.sonos.com/s/article/141。复制您的诊断编号并将其连同时间 window、Sonos 家庭 ID 和您的 Whosebug 用户名通过电子邮件发送至 developer-feedback@sonos.com。
您提到当您发送故障以响应 getMediaURI
时,您会收到一条错误消息,但您的示例显示了一个 getMediaMetadata
调用。
当您的服务器 returns AuthTokenExpired
故障 getLastUpdate
时,Sonos 不会启动重新授权向导。当 Sonos 扬声器发出 getMediaMetadata
呼叫但失败时,它不会开始播放。用户还会看到播放失败。
我们正在整合 Sonos API。 我们选择不实施令牌刷新,因此我们的令牌会持续 1 年,直到用户必须再次重新授权。
在我的测试期间,当浏览时出现 AuthTokenExpired 故障(响应 getMetadata)时,我成功地获得了重新授权弹出窗口。
但是每次从对 getMediaMetadata 的调用中 return 出现故障时,我都会收到默认错误消息 "Unable to play the radio station"。我希望看到重新授权弹出窗口。
引用自Sonos documentation about authentication tokens:
If you do not implement refresh tokens, when the token expires, return the Client.AuthTokenExpired fault to indicate the user must manually log in and authenticate again. The Log-Message is a string placed in the log messages for this fault code.
这是我们的 SMAPI 服务器和 Sonos application/speaker 之间有问题的对话:
31/03/2020 14:24:27 641 SonosApi Request http://www.sonos.com/Services/1.1#getMediaMetadata "<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<credentials xmlns="http://www.sonos.com/Services/1.1">
<deviceId>78-28-CA-9F-86-8E:8</deviceId>
<deviceProvider>Sonos</deviceProvider>
<loginToken>
<token>1fa35465a-6bbc-4cf4-b46f-0e12be5b3216</token>
<householdId>Sonos_W6VyCDwgI8ZadAWceKQ1avPrtd</householdId>
</loginToken>
</credentials>
<To s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://dev8.local.st-corp.fr:8001/SonosService.svc</To>
<Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://www.sonos.com/Services/1.1#getMediaMetadata</Action>
</s:Header>
<s:Body>
<getMediaMetadata xmlns="http://www.sonos.com/Services/1.1">
<id>14740</id>
</getMediaMetadata>
</s:Body>
</s:Envelope>"
31/03/2020 14:24:27 875 SonosApi Reply "<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header />
<s:Body>
<s:Fault>
<faultcode>s:Client.AuthTokenExpired</faultcode>
<faultstring xml:lang="fr-FR">The token is expired</faultstring>
</s:Fault>
</s:Body>
</s:Envelope>"
编辑:
参考更新后的文档和您的回答,我应该 return 在调用 getMetadata 和 getMediaUri 时出现 AuthTokenExpired 错误。
但是知道访问令牌已过期,我应该如何回答对 getMediaMetadata 的调用?
查看我的消息日志,我看到当用户单击可流项目时,将按以下顺序进行以下调用:
- getMediaMetadata(知道令牌已经过期的答案是什么?)
- getMediaUri(此处应处理AutTokenExpired)
如果我错了请纠正我,但为了建立对 getMediaUri 的调用,Sonos 客户端使用了上次调用 getMediaMetadata 时得到的 ID returned,我无法提供它,因为令牌已经过期了。在 getMediaMetadata 中先处理 AuthTokenExpired 不是更好吗?
此致
浏览 (getMetadata
) 和 getMediaURI
调用将遵循 AuthTokenExpired
错误。这些调用的重新授权流程如 Use authentication tokens 文档的 刷新过期身份验证令牌 部分所述。我将更新文档以反映这一点。
如果这不起作用,请提交诊断以对其进行调试。有关说明,请参阅 support.sonos.com/s/article/141。复制您的诊断编号并将其连同时间 window、Sonos 家庭 ID 和您的 Whosebug 用户名通过电子邮件发送至 developer-feedback@sonos.com。
您提到当您发送故障以响应 getMediaURI
时,您会收到一条错误消息,但您的示例显示了一个 getMediaMetadata
调用。
当您的服务器 returns AuthTokenExpired
故障 getLastUpdate
时,Sonos 不会启动重新授权向导。当 Sonos 扬声器发出 getMediaMetadata
呼叫但失败时,它不会开始播放。用户还会看到播放失败。