2016-09-22 70 views
9

在iOS 10中的Safari上,我的視頻無法正常播放,只顯示播放圖標。視頻需要asp.net身份驗證不適用於iOS 10

我通過一個asp.net服務器提供視頻服務,該服務器會檢查用戶是否已登錄並可以訪問該視頻。只有在iOS 10上,服務器纔會響應401 Unauthorized!

使用下面的代碼做了一些測試,我發現iOS 9上的safari會發送「.ASPXAUTH」cookie - 但iOS 10上的safari不會!

<video crossorigin="use-credentials" controls autoplay="autoplay"> 
    <source src="/Server/GetVideo.ashx?id=123"/> 
</video> 

爲什麼Safari瀏覽器無法播放我的視頻?有什麼辦法解決它?

+3

同樣在這裏。在我的情況下,它是一個LAMP堆棧應用程序,也可以通過Cookie/Session進行預先檢查。看起來像iOS 10在加載視頻時不會發送任何cookie。我仍在尋找解決方案。我不相信沒有辦法處理這個相當常見的用例。 – Marco

+0

@FlyBy你有沒有找到任何解決方案呢? – Hurricane

+0

對不起,延遲迴復。看起來你不能讓iOS加載視頻,包括sessioncookies。我們解決它如下: 生成每個用戶唯一的「媒體標記」。此令牌需要作爲GET參數附加到使用iOS 10時製作的每個視頻請求。請求視頻資源時使用媒體令牌標識用戶。 這種方式視頻不需要完全公開,至少有一些「安全」的最低限度。該鏈接可以被複制和粘貼,但至少只有用戶會話有效時纔有效。 – Marco

回答

2

我的解決辦法是在這裏: https://stackoverflow.com/a/40015409/7012293

基本上你需要發送,如果會話cookie丟失禁止403。 Safari將使用會話cookie重試。

+0

我測試了這個,它的工作原理!來自safari的有趣的行爲...好的發現,感謝您的答案! – Mystogan

2

我們對完全不同的技術堆棧(Linux,PHP,Moodle)也有完全相同的問題。我們的會話cookie不會與視頻(和音頻)請求一起發送。

我們無法找到一種讓iOS在這裏正常運行的方法,因此我們通過檢測iOS 10並將其發送到不同的腳本來處理視頻,通過一個緊急補丁來解決問題在此腳本的路徑內安全加密會話cookie值的版本,然後執行各種黑客行爲,以便來自該路徑的值用於從該腳本內(而不是不存在的cookie)識別會話。這種改變很有效,但是很複雜,安全性較小,而且可能很難在不同的技術上實現。

這似乎是iOS 10的一個主要問題,所以我希望它可能會在未來的更新中修復。另外,我注意到,雖然我們的會話cookie不包含在視頻中,但其他幾個cookie也包含在內!我實際上無法弄清楚哪些不是。 (其中的第一件事情我想是使用一種定時到期,而不是會話cookie,但是這並沒有得到與視頻或者發送。)

+0

我同意,這真的感覺像是iOS的一個主要問題。我已經向蘋果發送了一個錯誤報告,所以希望他們能夠在一個小的更新中修復它。 – Mystogan

2

解決辦法是在這裏找到:

HTML5 video/audio player on mobile Safari (iOS 7 & iOS 10) excludes cookies

將過期日期設置爲cookie,iOS 10中的視頻播放器可以讀取cookie。沒有到期日期會話cookie無法在iOS的視頻播放器讀回10

+0

理想情況下,我不希望在asp.net cookie上設置過期日期,使它們保持非持久性 - 但儘管如此,感謝您的出色答案!編輯:測試了這一點,但仍然不能解決問題。 – Mystogan