Azure Key Vault - 验证由第 3 方签名的 JWT

Azure Key Vault - Validate JWT signed by 3rd party

我在我的 Azure Key Vault 上创建了一个密钥,使用已知的第 3 方用来签署它发出的 JWT 的相同 pfx。

但我不知道我做错了什么,但验证总是返回否定。

我的代码是:

var client = new CryptographyClient(new Uri(myKeyVaultAddress), clientSecretCredential);

var jwtByParts = jwt.Split(".");
var header = jwtByParts[0];
var body = jwtByParts[1];
var signature = Encoding.UTF8.GetBytes(jwtByParts[2]);


var byteData = Convert.FromBase64String(body.Length % 4 == 0 ? body : body.PadRight(body.Length + 4 - body.Length % 4, '='));
var hasher = new SHA256CryptoServiceProvider();
var digest = hasher.ComputeHash(byteData);

var res = await client.VerifyAsync(SignatureAlgorithm.RS256, digest, signature);

有效的 JWT 样本是:

eyJhbGciOiJSUzI1NiJ9.eyJhdXRoX3RpbWUiOjE2MzMzNjQxODAyNzksImV4cCI6MTYzNDY5MTg4ODE1Miwic3ViIjoibGFuZXRcL3ZpemVuZXppQGNhcmJvbi5zdXBlciIsImF6cCI6InE4aENMNkM5bU5EZDhBMHBEb3lQT2d5ckJuY2EiLCJhdF9oYXNoIjoiWTJFeVl6TmxNek00TXpZM01qQXpOelUyWVdZek5EUmpOek16WW1NM05tTT0iLCJhdWQiOlsicThoQ0w2QzltTkRkOEEwcERveVBPZ3lyQm5jYSJdLCJpc3MiOiJodHRwczpcL1wvZGV2LWRldi1hcGkudGlja2V0LmNvbS5iclwvb2F1dGgyZW5kcG9pbnRzXC90b2tlbiIsImlhdCI6MTYzNDY4ODI4ODE1Mn0.QuQaMdaQO9iCuvf6rbkroIXth4XjurxENSriHqnMUniIR2UwVK63JoWorDwTEIWdfBUkJr4unN6DYO0e96L4QmXvMoHLJ12xRzqFblZ_gPUtsREde6Qfw3RIbPO50Sj6t_Q2E61cLqytCwlVNsUQ9sZrlAfYIvQulec5PgMepqk-dQJYdqD3iZYb1Qqoek4LffxcqdYioqFo4--uarKJrFfbv8Kv8ukI7HPZ0TMZadKYmkgpzwWZJQqhYm6Jz4vGiyJqnFuXls7QoasG10V9OQN38zq7IywOdB7eH6q_QAzM2gF57Eg5EJ6U2YMu6BKn6f5Nialol7KcWaLIsHMLnA

对我来说已经有一段时间了,我还没有测试过,但我认为你错过了从 base64url 编码转换签名 (jwtByParts[2]) 之前的步骤 (GetBytes) - 就像你为 body.

做的一样

另请注意,您必须将 base64url 字符 -_ 转换回 +/对于所有人~(除非我错过了上面代码中的那部分)

Base64UrlEncoder Class