Ich habe ein Token, eine Datei mit einem öffentlichen Schlüssel, und ich möchte die Signatur überprüfen. Ich habe versucht, Signatur basierend auf this zu überprüfen.C# Wie kann ich die Signatur JWT verifizieren?
decodedCrypto und decodedSignature stimmen jedoch nicht überein.
Hier ist mein Code:
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();
}
ich bin sicher, dass die Unterschrift von Token gültig ist. Ich versuche, auf https://jwt.io/ zu überprüfen, und es zeigte, dass die Signatur verifiziert. Also das Problem ist der Algorithmus zu verschlüsseln, zu dekodieren.
Gibt es jemanden, der dieses Problem lösen kann? Der Algorithmus ist RS256
Was ist "BinarySecretSecurityToken" hier? Kein Hinweis hier – anhtv13
@ANguyen: https://msdn.microsoft.com/en-us/library/system.servicemodel.security.tokens.binarysecretsecuritytoken(v=vs.110).aspx – Helikaon
Es ist ein Teil von 'IdentityModel' Bibliothek . –