Ho un token, un file che contiene la chiave pubblica e voglio verificare la firma. Ho provato a verificare la firma in base a this.C# Come verificare la firma JWT?
Tuttavia, decodedCrypto e decodedSignature non corrispondono.
Ecco il mio codice:
public static string Decode(string token, string key, bool verify)
{
var parts = token.Split('.');
var header = parts[0];
var payload = parts[1];
byte[] crypto = Base64UrlDecode(parts[2]);
var headerJson = Encoding.UTF8.GetString(Base64UrlDecode(header));
var headerData = JObject.Parse(headerJson);
var payloadJson = Encoding.UTF8.GetString(Base64UrlDecode(payload));
var payloadData = JObject.Parse(payloadJson);
if (verify)
{
var bytesToSign = Encoding.UTF8.GetBytes(string.Concat(header, ".", payload));
var keyBytes = Encoding.UTF8.GetBytes(key);
var algorithm = (string)headerData["alg"];
var signature = HashAlgorithms[GetHashAlgorithm(algorithm)](keyBytes, bytesToSign);
var decodedCrypto = Convert.ToBase64String(crypto);
var decodedSignature = Convert.ToBase64String(signature);
if (decodedCrypto != decodedSignature)
{
throw new ApplicationException(string.Format("Invalid signature. Expected {0} got {1}", decodedCrypto, decodedSignature));
}
}
return payloadData.ToString();
}
Sono sicuro che la firma di token è valido. Provo a verificare su https://jwt.io/ e ha dimostrato che la firma è stata verificata. Quindi il problema è l'algoritmo da codificare, decodificare.
C'è qualcuno in grado di risolvere questo problema? L'algoritmo è RS256
Che cos'è "BinarySecretSecurityToken" qui? Nessun riferimento qui – anhtv13
@ANguyen: https://msdn.microsoft.com/en-us/library/system.servicemodel.security.tokens.binarysecretsecuritytoken(v=vs.110).aspx – Helikaon
Fa parte della libreria 'IdentityModel' . –