JWT 令牌验证正确,但 Azure 媒体 AES 失败并出现 AuthorizationPolicyEvaluationFailure 错误
JWT token validates correctly, but fails Azure media AES with AuthorizationPolicyEvaluationFailure error
我设置了一个简单的 Azure 函数来测试 Azure 媒体服务。我正在尝试保护我上传的视频,但我似乎无法正确设置 JWT。这是简单的功能代码。
[FunctionName("Test")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
var expires = DateTimeOffset.UtcNow.AddMinutes(20);
var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("RYhzAnz....VP0uQ==")); // removed full key for brevity
var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);
var claims = new List<Claim>
{
};
var token = new JwtSecurityToken("http://test.net/",
"urn:user",
claims.AsEnumerable(),
expires: expires.LocalDateTime,
signingCredentials: credentials
);
return new OkObjectResult(new JwtSecurityTokenHandler().WriteToken(token));
}
我已经填写了令牌中的 issuer/audience,以便它与我的 Azure 设置中的内容相匹配。
我什至在 jwt.io 上验证了该令牌,并且验证正确
但是当我在 Azure 媒体播放器上对其进行测试时,响应是带有 AuthorizationPolicyEvaluationFailure 的 401。
这是 Azure 密钥传送服务的响应
{
"Error": {
"Message": "Failed content key policy evaluation.",
"Code": "AuthorizationPolicyEvaluationFailure"
}
}
我想你忘了在声明中输入内容密钥 ID。您的保单可能要求这样做。这是生成令牌之前要添加的行:
claims.Add(new Claim(ContentKeyPolicyTokenClaim.ContentKeyIdentifierClaim.ClaimType, keyIdentifier));
发现我做错了什么。问题隐藏在众目睽睽之下。问题归结为这行代码。
Encoding.UTF8.GetBytes("RYhzAnz....VP0uQ==")
这是获取安全密钥的字节,但安全密钥本身是 base64 编码的。我不得不改成这个。
System.Convert.FromBase64String("RYhzAnz....VP0uQ==")
我在调试 Azure Media Service AES 示例时解决了这个问题。
在两行下方评论可以帮助我解决这个问题....
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
rng.GetBytes(TokenSigningKey);
我设置了一个简单的 Azure 函数来测试 Azure 媒体服务。我正在尝试保护我上传的视频,但我似乎无法正确设置 JWT。这是简单的功能代码。
[FunctionName("Test")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
var expires = DateTimeOffset.UtcNow.AddMinutes(20);
var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("RYhzAnz....VP0uQ==")); // removed full key for brevity
var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);
var claims = new List<Claim>
{
};
var token = new JwtSecurityToken("http://test.net/",
"urn:user",
claims.AsEnumerable(),
expires: expires.LocalDateTime,
signingCredentials: credentials
);
return new OkObjectResult(new JwtSecurityTokenHandler().WriteToken(token));
}
我已经填写了令牌中的 issuer/audience,以便它与我的 Azure 设置中的内容相匹配。
我什至在 jwt.io 上验证了该令牌,并且验证正确
但是当我在 Azure 媒体播放器上对其进行测试时,响应是带有 AuthorizationPolicyEvaluationFailure 的 401。
这是 Azure 密钥传送服务的响应
{
"Error": {
"Message": "Failed content key policy evaluation.",
"Code": "AuthorizationPolicyEvaluationFailure"
}
}
我想你忘了在声明中输入内容密钥 ID。您的保单可能要求这样做。这是生成令牌之前要添加的行:
claims.Add(new Claim(ContentKeyPolicyTokenClaim.ContentKeyIdentifierClaim.ClaimType, keyIdentifier));
发现我做错了什么。问题隐藏在众目睽睽之下。问题归结为这行代码。
Encoding.UTF8.GetBytes("RYhzAnz....VP0uQ==")
这是获取安全密钥的字节,但安全密钥本身是 base64 编码的。我不得不改成这个。
System.Convert.FromBase64String("RYhzAnz....VP0uQ==")
我在调试 Azure Media Service AES 示例时解决了这个问题。
在两行下方评论可以帮助我解决这个问题....
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
rng.GetBytes(TokenSigningKey);