You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 19:50:17