请求流时的 Sonos 身份验证
Sonos authentication when requesting a stream
提前道歉,这个问题可能太模糊,无法被纳入 Whosebug 的好问题大炮。然而,它确实反映了我对该领域知识的当前状态。
Sonos 为第 3 方服务提供了向 Sonos 用户提供音乐服务的能力。这个我明白了,而且Sonos提供的文档很全面
但是,我们有服务提供商A的场景,为用户提供以下服务:
- 访问流媒体广播(A 有权并可以提供流媒体)
- 访问点播/回放内容(A 有权并可以提供流)
- 能够创建在 1 和 2 中播放的音乐的播放列表(A 对此没有权限,而是通过用户拥有帐户的一个或多个第 3 方音乐服务提供流)。
这在 A 自己的应用程序的上下文中非常有效 - 其中包括与第三方音乐服务的集成,这些服务为低于 3 的内容提供流(即,如果您是 A 的用户,那么虽然您可以创建播放列表,如果您想实际播放播放列表中的曲目,则需要一个拥有该特定曲目的权利的服务提供商的帐户。
但是,我很难在 Sonos 的背景下对此进行推理。
如果作为 A 的用户,我有以下容器:
容器 1
- item1('podcast' 属于服务 A)
- item2(歌曲,属于服务B)
我注册了服务 A 和服务 B,服务 A 和服务 B 在 Sonos 上都可以单独使用,并且都使用 DeviceLink 进行身份验证(为了本示例的目的,假设服务 B 是 Spotify)。
如果用户请求容器,将 item1 添加到他们的队列然后按下播放,播放器将从服务 A 请求流式 uri,服务 A 将 return 其格式为:
http://service-a.uri/some-file
然后播放器将对此 uri 执行 GET 请求,项目将开始播放。
但是,如果用户将 item2 添加到他们的队列然后按下播放,服务 A 将 return 属于服务 B 的流式 uri,如下所示:
http://service-b.uri/some-file
在这种情况下,身份验证是如何处理的?
用户认证如下:
在服务 A 内:
- 到服务 A
- 到服务 B,通过服务 B 的 API。
Sonos 内部:
- 到服务 A
- 到服务 B
但是,Sonos 会将服务 A 的凭据发送到服务 B,因此流式传输将失败(因为它为什么会知道服务 A 与服务 B 之间存在预先存在的关系,服务 A 用户可以从中消费内容服务 B,如果所述用户已经拥有服务 B 的帐户)。
所以在 Sonos 的背景下无法实现我想要做的事情,还是我从根本上误解了这里的某些东西?
这是一个非常好的问题。
对于流式传输,Sonos 通过 getMediaUri 请求请求 uri。然后使用此 uri 流式传输内容。如果作为此请求的结果返回的 uri 是可流式传输的,则应该没有问题。可以包含 headers ,它应该与 uri 请求一起发送,如果需要一些额外的身份验证,也可以使用它。 (例如,将身份验证令牌传递给服务 B)。然而,这里的要求是服务 A 将拥有将此信息正确传递给 Sonos 所需的一切,以便 Sonos 可以将其包含在对服务 B 的请求中。
出于安全原因,Sonos 目前无法将服务 B 的身份验证令牌或信息传递给服务 A; Sonos 播放器也没有办法知道它请求的 url 由服务 A 提供的实际上是为服务 B 准备的。播放器也没有办法通知服务 A 用户也已安装服务 B。
这是我们考虑过的,将来会考虑提供一种机制来支持这个。
提前道歉,这个问题可能太模糊,无法被纳入 Whosebug 的好问题大炮。然而,它确实反映了我对该领域知识的当前状态。
Sonos 为第 3 方服务提供了向 Sonos 用户提供音乐服务的能力。这个我明白了,而且Sonos提供的文档很全面
但是,我们有服务提供商A的场景,为用户提供以下服务:
- 访问流媒体广播(A 有权并可以提供流媒体)
- 访问点播/回放内容(A 有权并可以提供流)
- 能够创建在 1 和 2 中播放的音乐的播放列表(A 对此没有权限,而是通过用户拥有帐户的一个或多个第 3 方音乐服务提供流)。
这在 A 自己的应用程序的上下文中非常有效 - 其中包括与第三方音乐服务的集成,这些服务为低于 3 的内容提供流(即,如果您是 A 的用户,那么虽然您可以创建播放列表,如果您想实际播放播放列表中的曲目,则需要一个拥有该特定曲目的权利的服务提供商的帐户。
但是,我很难在 Sonos 的背景下对此进行推理。
如果作为 A 的用户,我有以下容器:
容器 1
- item1('podcast' 属于服务 A)
- item2(歌曲,属于服务B)
我注册了服务 A 和服务 B,服务 A 和服务 B 在 Sonos 上都可以单独使用,并且都使用 DeviceLink 进行身份验证(为了本示例的目的,假设服务 B 是 Spotify)。
如果用户请求容器,将 item1 添加到他们的队列然后按下播放,播放器将从服务 A 请求流式 uri,服务 A 将 return 其格式为:
http://service-a.uri/some-file
然后播放器将对此 uri 执行 GET 请求,项目将开始播放。
但是,如果用户将 item2 添加到他们的队列然后按下播放,服务 A 将 return 属于服务 B 的流式 uri,如下所示:
http://service-b.uri/some-file
在这种情况下,身份验证是如何处理的?
用户认证如下:
在服务 A 内:
- 到服务 A
- 到服务 B,通过服务 B 的 API。
Sonos 内部:
- 到服务 A
- 到服务 B
但是,Sonos 会将服务 A 的凭据发送到服务 B,因此流式传输将失败(因为它为什么会知道服务 A 与服务 B 之间存在预先存在的关系,服务 A 用户可以从中消费内容服务 B,如果所述用户已经拥有服务 B 的帐户)。
所以在 Sonos 的背景下无法实现我想要做的事情,还是我从根本上误解了这里的某些东西?
这是一个非常好的问题。
对于流式传输,Sonos 通过 getMediaUri 请求请求 uri。然后使用此 uri 流式传输内容。如果作为此请求的结果返回的 uri 是可流式传输的,则应该没有问题。可以包含 headers ,它应该与 uri 请求一起发送,如果需要一些额外的身份验证,也可以使用它。 (例如,将身份验证令牌传递给服务 B)。然而,这里的要求是服务 A 将拥有将此信息正确传递给 Sonos 所需的一切,以便 Sonos 可以将其包含在对服务 B 的请求中。
出于安全原因,Sonos 目前无法将服务 B 的身份验证令牌或信息传递给服务 A; Sonos 播放器也没有办法知道它请求的 url 由服务 A 提供的实际上是为服务 B 准备的。播放器也没有办法通知服务 A 用户也已安装服务 B。
这是我们考虑过的,将来会考虑提供一种机制来支持这个。