iOS 使用基于 Cookie 的身份验证从服务器流式传输音频

Posted

技术标签:

【中文标题】iOS 使用基于 Cookie 的身份验证从服务器流式传输音频【英文标题】:iOS Stream Audio From Server With Cookie-based Auth 【发布时间】:2011-12-21 09:18:39 【问题描述】:

我正在尝试从受基于会话的身份验证保护的服务器流式传输音频文件,我注意到 MPMoviePlayerController 和 AVPlayerItem / AVPlayer 似乎都没有使用 NSHTTPCookieStorage 中设置的 cookie。如果我使用 NSURLConnection 发出相同的 URL 请求,我会得到 200 并且能够访问音频文件。当我通过代理监控请求时,似乎 MPMoviePlayerController 没有在请求标头中设置 cookie,而 NSURLConnection 则:

使用 MPMoviePlayerController 的 initWithContentURL 发出的请求:

GET /path/on/server/test1.m4a HTTP/1.1
Host: server.example.net
User-Agent: AppleCoreMedia/1.0.0.9A334 (iPhone Simulator; U; CPU OS 5_0 like Mac OS X; en_us)
Accept: */*
Range: bytes=0-1
Accept-Encoding: identity
X-Playback-Session-Id: E8F093F4-C906-46A8-94FE-30BBCFDAB3F6
Connection: keep-alive

使用 NSURLConnection 发出的请求:

GET /path/on/server/test1.m4a HTTP/1.1
Host: server.example.net
User-Agent: otest (unknown version) CFNetwork/548.0.3 Darwin/11.1.0
Accept: */*
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Cookie: somekey=abc123def456
Connection: keep-alive

有谁知道在请求远程资源时如何让 MPMoviePlayerController 或 AVPlayerItem 使用 NSHTTPCookie?

【问题讨论】:

【参考方案1】:

您可以使用派生自 NSURLProtocol 的类拦截来自 MPMoviePlayerController 的请求,并在此过程中注入 cookie。这是代码:https://***.com/a/23261001/3547099

【讨论】:

【参考方案2】:

在远程流/文件上使用MPMoviePlayerController 时,AFAIK 无法强制执行 cookie(或任何其他额外的 HTTP 参数)。

也许 GET 参数可能是您的任务的一种解决方法?

【讨论】:

这基本上也是我发现的。我最终分叉了 Matt Gallagher 的 Audiostreamer 并对其进行了修改以支持自定义 HTTP 标头:github.com/arifken/AudioStreamer

以上是关于iOS 使用基于 Cookie 的身份验证从服务器流式传输音频的主要内容,如果未能解决你的问题,请参考以下文章

删除 Worklight Adapter 中的 Cookie:多个会话使用基于相同适配器的身份验证

服务器如何验证基于会话的 cookie 是真实的?

如何使用基于 cookie 的身份验证授权 Web API

具有基于 HttpOnly cookie 的身份验证和会话管理的单页应用程序

在 Chromecast Receiver 中利用基于 cookie 的身份验证

使用 cookie/会话进行移动应用程序身份验证?