Azure Media Service URL查询参数传递JWT Token无效问题求助
在Xamarin.Forms中播放Azure Media Service受JWT令牌保护视频的问题
我正尝试在Xamarin.Forms应用中流式播放Azure Media Service(AMS)中受JWT令牌保护的视频,以下是详细情况:
1. JWT令牌生成代码
我使用以下代码生成JWT令牌:
private string GetJWT(string PrimaryKey) { var tokenSigningKey = new SymmetricSecurityKey(Convert.FromBase64String(PrimaryKey)); SigningCredentials cred = new SigningCredentials(tokenSigningKey, SecurityAlgorithms.HmacSha256); JwtSecurityToken token = new JwtSecurityToken( issuer: "xxx", audience: "yyy", claims: null, notBefore: DateTime.Now.AddMinutes(-5), expires: DateTime.Now.AddMinutes(60), signingCredentials: cred); JwtSecurityTokenHandler handler = new JwtSecurityTokenHandler(); return handler.WriteToken(token); }
2. 令牌有效性验证
- 目标资产的URI为:
https://xxx.streaming.media.azure.net/12222-1565-232323-a5b8-c10e148273ae/Test.ism/manifest(format=m3u8-cmaf,encryption=cbc) - 使用Azure Media Player测试该URI与生成的AES令牌时,视频可正常播放,说明令牌本身是有效的。
3. Xamarin.Forms中的尝试方案
由于Xamarin.Forms的MediaElement控件无法在请求头中携带令牌,我参考官方文档尝试通过URL查询参数传递令牌,代码如下:
string armoredAuthToken = System.Web.HttpUtility.UrlEncode(authToken); string uriWithTokenParameter = string.Format("{0}&token={1}", keyDeliveryServiceUri.AbsoluteUri, armoredAuthToken); Uri keyDeliveryUrlWithTokenParameter = new Uri(uriWithTokenParameter); player.Source = keyDeliveryUrlWithTokenParameter; // player为MediaElement控件实例
我怀疑文档中的URL拼接方式有误,将&替换为?后重新尝试,但两种拼接方式均无法加载视频。
此外,我用VLC测试带令牌参数的URI(https://xxx.streaming.media.azure.net/12222-1565-232323-a5b8-c10e148273ae/Test.ism/manifest(format=m3u8-cmaf,encryption=cbc)?token=zzzzz),同样无法播放。推测问题出在URL查询参数中的令牌,Azure似乎无法读取该参数。
内容的提问来源于stack exchange,提问作者FabRueil
相关产品推荐
相关产品推荐

