Azure Media Services点播视频JWT解密失败问题问询
针对Azure Media Services JWT令牌解密失败问题的解答
我来帮你梳理下点播视频时遇到的JWT解密失败问题,针对你的两个疑问逐一说明:
1. JWT令牌必须包含的核心声明
Azure Media Services(AMS)对JWT令牌的声明有明确要求,必须包含以下关键项,且值要和你在AMS中配置的自定义令牌验证规则严格匹配:
iss:签发者(Issuer)。必须和AMS门户/API中设置的令牌验证签发者完全一致,AMS会校验这个值来确认令牌的合法来源。aud:受众(Audience)。同样要和AMS配置的受众值匹配,通常可以设置为AMS账户的域名,或者你自定义的标识字符串。exp:过期时间(Expiration Time)。Unix时间戳格式,必须是未来的时间,否则令牌会被判定为过期而拒绝。urn:azure:mediaservices:contentkeyidentifier:内容密钥ID。这是AMS用来定位对应解密密钥的关键声明,必须和你要播放的视频资产关联的内容密钥ID完全一致。
可选但建议添加的声明:
nbf:生效时间(Not Before)。设置令牌可以被使用的起始时间,避免令牌被提前滥用。
注意:如果你的AMS配置了额外的声明校验规则(比如自定义声明),那也需要在JWT中包含对应的项,否则会导致验证失败。
2. 自定义STS生成符合AMS要求的JWT示例
这里提供一个简化的C#示例,使用官方的System.IdentityModel.Tokens.Jwt库生成合法的JWT令牌,你可以基于这个示例搭建自己的自定义STS服务:
using System; using System.Collections.Generic; using System.IdentityModel.Tokens.Jwt; using System.Security.Claims; using System.Security.Cryptography.X509Certificates; using Microsoft.IdentityModel.Tokens; public class AmsCustomSts { public static string GenerateValidAmsJwt( string contentKeyId, string trustedIssuer, string targetAudience, DateTime tokenExpiry, X509Certificate2 signingCertificate) { // 构建AMS要求的核心声明 var claimsList = new List<Claim> { new Claim(JwtRegisteredClaimNames.Iss, trustedIssuer), new Claim(JwtRegisteredClaimNames.Aud, targetAudience), new Claim(JwtRegisteredClaimNames.Exp, new DateTimeOffset(tokenExpiry).ToUnixTimeSeconds().ToString()), new Claim("urn:azure:mediaservices:contentkeyidentifier", contentKeyId), // 可选:添加生效时间声明 new Claim(JwtRegisteredClaimNames.Nbf, new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds().ToString()) }; // 使用证书创建签名凭据 var signingCredentials = new SigningCredentials( new X509SecurityKey(signingCertificate), SecurityAlgorithms.RsaSha256); // 生成JWT令牌 var jwtToken = new JwtSecurityToken( issuer: trustedIssuer, audience: targetAudience, claims: claimsList, expires: tokenExpiry, signingCredentials: signingCredentials); return new JwtSecurityTokenHandler().WriteToken(jwtToken); } }
使用注意事项:
- 确保
signingCertificate是你在AMS中配置的验证证书(公钥已上传到AMS,私钥用于签名)。 contentKeyId要从AMS的内容密钥详情中获取,确保和目标视频资产绑定的密钥一致。trustedIssuer和targetAudience必须和AMS中自定义令牌验证的配置完全匹配。
另外,你可以用JWT解析工具来检查生成的令牌:确认声明是否完整、签名是否有效、时间戳是否正确,这能快速排查令牌本身的问题。
内容的提问来源于stack exchange,提问作者Carlos Online
相关产品推荐
相关产品推荐

