Azure Media Service:如何获取STS、许可证及生成验证令牌?
Azure Media Services许可证获取与令牌生成指南
嘿,我来帮你梳理下这几个问题的解决方法,都是AMS开发里常碰到的点,一步步来:
一、如何获取许可证
其实获取许可证的方式分两种,看你之前的配置:
- 自动触发(最常用):当你用兼容的播放器(比如Azure Media Player、Shaka Player)加载加密后的媒体内容时,播放器会自动识别DRM保护,并向AMS的密钥交付端点发起许可证请求。你只需要在播放器配置里指定正确的密钥交付地址,格式大概是
https://<你的AMS账户名>.keydelivery.mediaservices.windows.net/<DRM类型>/license,比如PlayReady的就是https://xxx.keydelivery.mediaservices.windows.net/PlayReady/license。 - 自定义许可证服务:如果你需要在发许可证前做用户身份验证、权限校验这类自定义逻辑,可以自己搭一个中间服务。在AMS门户里把密钥交付端点改成你的服务地址,你的服务先验证用户合法性,再向AMS请求许可证转发给客户端,或者直接用你持有的内容密钥生成许可证。
二、用验证密钥生成令牌
这里说的令牌一般是JWT,用来向AMS证明用户有权获取许可证,步骤很清晰:
- 确认签名算法:AMS支持HS256(对称密钥,简单易上手)和RS256(非对称密钥,更安全),选哪种看你之前内容密钥策略里的配置。
- 构造JWT声明:必须包含几个核心字段:
aud:受众,要和你AMS内容密钥策略里设置的受众完全一致,一般是urn:azure:mediaservices:contentkeyexp:过期时间,比如设成当前时间加3600秒(1小时),避免令牌长期有效nbf:生效时间,一般设成当前时间就行
你还可以加自定义字段,比如用户ID,方便后续做权限细分。
- 签名生成令牌:用你手里的验证密钥对JWT进行签名。举个Node.js的例子,用
jsonwebtoken库:
const jwt = require('jsonwebtoken'); // 注意这个密钥要和AMS内容密钥策略里的签名密钥完全匹配 const signingKey = '你的验证密钥字符串'; const token = jwt.sign( { aud: 'urn:azure:mediaservices:contentkey', exp: Math.floor(Date.now() / 1000) + 3600, nbf: Math.floor(Date.now() / 1000) }, signingKey, { algorithm: 'HS256' } );
生成的令牌要在播放器请求许可证时带上,通常是放在请求头的Authorization里,格式是Bearer <你的JWT令牌>。
三、从哪里获取验证密钥
这个密钥是你在配置AMS内容密钥策略时设置的,找起来很简单:
- 登录Azure门户,进入你的Media Services账户
- 找到内容密钥策略,点开你之前为加密媒体配置的那个策略
- 看策略详情里的限制部分,如果你选的是令牌限制,就能看到签名密钥的配置:
- 如果是对称密钥(HS256):你可以查看密钥(注意AMS只在创建时显示完整密钥,之后只能重新生成),一定要把这个密钥妥善保存,丢失了只能重新生成
- 如果是非对称密钥(RS256):AMS里只存了公钥,你需要用自己生成并保管的私钥来签名令牌,这个私钥一开始就是你自己创建的,要确保安全存储
内容的提问来源于stack exchange,提问作者Bob Parker
相关产品推荐
相关产品推荐

