web-dev-qa-db-fra.com

JWT SecurityTokenInvalidSignatureException utilisant RS256 PII est masqué

Veuillez aider! J'ai du mal à valider un jeton JWT signé avec RS256 à l'aide de la bibliothèque System.IdentityModel.Tokens.Jwt de Microsoft.

Ce jeton valide très bien sur JWT.io .

Voici l'erreur:

Microsoft.IdentityModel.Tokens.SecurityTokenInvalidSignatureException IDX10503: la validation de la signature a échoué. Clés essayées: '[PII est masqué]'. Exceptions détectées: "[PII est masqué]". jeton: '[PII est masqué]'.

Voici l'exemple de code (j'ai utilisé LinqPad, avec le package NuGet System.IdentityModel.Tokens.Jwt v5.2.2) :

void Main()
{
    var cText =
        "-----BEGIN CERTIFICATE-----\n" +
        "MIIBljCCAUACCQCIDMpqK7WfWDANBgkqhkiG9w0BAQsFADBSMQswCQYDVQQGEwJV\n" + 
        "UzETMBEGA1UECAwKU29tZS1TdGF0ZTESMBAGA1UECgwJTHV4b3R0aWNhMRowGAYD\n" +
        "VQQLDBFMdXhvdHRpY2EgZXllY2FyZTAeFw0xODA1MjMxNTE1MjdaFw0yODA1MjAx\n" +
        "NTE1MjdaMFIxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApTb21lLVN0YXRlMRIwEAYD\n" +
        "VQQKDAlMdXhvdHRpY2ExGjAYBgNVBAsMEUx1eG90dGljYSBleWVjYXJlMFwwDQYJ\n" +
        "KoZIhvcNAQEBBQADSwAwSAJBAKuMYcirPj81WBtMituJJenF0CG/HYLcAUOtWKl1\n" +
        "HchC0dM8VRRBI/HV+nZcweXzpjhX8ySa9s7kJneP0cuJiU8CAwEAATANBgkqhkiG\n" +
        "9w0BAQsFAANBAKEM8wQwlqKgkfqnNFcbsZM0RUxS+eWR9LvycGuMN7aL9M6GOmfp\n" +
        "QmF4MH4uvkaiZenqCkhDkyi4Cy81tz453tQ=\n" +
        "-----END CERTIFICATE-----";

    var c = new X509Certificate2(Encoding.ASCII.GetBytes(cText));
    var p = new TokenValidationParameters();
    p.IssuerSigningKeyResolver = (s, securityToken, identifier, parameters)
        => new[] { new X509SecurityKey(c) };
    var h = new JwtSecurityTokenHandler();
    var token = @"eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJuLmNoaWVmZm8iLCJleHAiOjE1MjcyMzg4ODEsImlzcyI6Imx1eCJ9.BAaYzLwokmdKqLi6zKjGIpDXd__dZxi5PUWWHS3PSLPDYAInzPbEK8o4WxunoGD7eA0qtQNaxNpzeOc3BHrd4w";
    h.ValidateToken(token, p, out SecurityToken _);
}

Enfin, il serait bien de savoir également comment supprimer le [PII est masqué] afin que je puisse voir plus de détails sur l'erreur. La définition de enableLoggingKnownPii et logKnownPII sur true dans app.config ou même dans le fichier machine.config ne semble pas faire de différence.

12
Carlo Bos

Il s'avère que la KeySize pour X509SecurityKey doit avoir une longueur d'au moins 1024 pour la vérification. Ce n'est pas évident de l'exception, car il est caché avec le filtre [PII est caché].

L'ajout de la ligne suivante a rendu le texte d'exception beaucoup plus utile:

IdentityModelEventSource.ShowPII = true;

Le nouveau texte d'exception:

'System.ArgumentOutOfRangeException: IDX10631: La' Microsoft.IdentityModel.Tokens.X509SecurityKey 'à vérifier ne peut pas être inférieure à' 1024 'bits. KeySize: '512'.

L'augmentation de la longueur de la clé asymétrique à 1024 a résolu le problème.

29
Carlo Bos