web-dev-qa-db-fra.com

Validation manuelle d'un jeton JWT en C #

Je rencontre des problèmes en cours de validation manuelle un jeton JWT émis par Identity Server 4. Utilisation de la 

ClientId: "CLIENT1" ClientSecret: "123456"

L'exception que je continue à recevoir est la suivante: IDX10501: la validation de la signature a échoué. Impossible de faire correspondre les clés: '[Les PII sont masqués par défaut. Définissez l'indicateur 'ShowPII' dans IdentityModelEventSource.cs sur true pour le révéler.] '

Est-ce que quelqu'un est capable de me dire où je vais mal?.

    private static void ValidateJwt(string jwt, DiscoveryResponse disco)
    {        

        var parameters = new TokenValidationParameters
        {

            ValidateIssuerSigningKey = true,
            ValidIssuer = disco.Issuer,
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("123456")),               
            ValidAudience = "CLIENT1",
            //IssuerSigningKeys = keys,
            // ValidateAudience = true,
            // ValidateLifetime = true,
        };

        SecurityToken validatedToken;
        var handler = new JwtSecurityTokenHandler();
        handler.InboundClaimTypeMap.Clear();

        try
        {
            var user = handler.ValidateToken(jwt, parameters, out validatedToken);
        }
        catch(Exception ex)
        {
            var error = ex.Message;
        }

    }
3
MarzSocks

Découvrez ValidateJwt() dans cet exemple:

https://github.com/IdentityServer/IdentityServer4.Samples/blob/master/Clients/src/MvcManual/Controllers/HomeController.cs

Le bit qui vous manque est le chargement de la clé publique à partir du document de découverte. 

4
mackie

IdentityServer signe le JWT à l’aide de RS256. Cela signifie que vous devez utiliser une clé publique pour vérifier le fichier JWT (vous pouvez l'obtenir à partir du document de découverte).

L'ID client et le secret client sont les informations d'identification du client utilisées pour demander des jetons. Ils ne participent pas à leur validation.

1
Scott Brady

Vous essayez d'utiliser la validation SymmetricKey for JWT. Essayez de regarder votre jeton dans JWT.io et si l’algorithme est "RS256", SymmetricKey ne fonctionnera pas.

1
akhileshcoer

Vous avez spécifié:

IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("secret"))

mais la variable JwtSecurityTokenHandler ne peut pas la faire correspondre à la clé qui peut faire partie de l'en-tête jwt lui-même . Fondamentalement, cela signifie que votre configuration ne correspond pas à la configuration de l'émetteur réel. L'erreur suggère que cela concerne les clés de signature.

Vérifiez la configuration de cet émetteur (si vous le pouvez), recherchez les pièces manquantes et réessayez.

Vous pouvez utiliser jwt.io pour déboguer votre jwt en ligne.

0
stukselbax

Essayez de changer la longueur de votre clé privée. Votre clé privée est trop petite pour être encodée, je suppose.

0
Arjit Sharma