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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:49:41