2017-11-05 2 views
1

ich einen Auth0 Client erstellt haben, ich bin Protokollierung dieses Token in und erhalten:Verifizieren Auth0 JWT wirft ungültig algorigthm

eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ik1rVkdOa1l5T1VaQ1JqTkRSVE5EUmtNeU5rVkROMEUyUTBVMFJrVXdPVEZEUkVVNU5UQXpOZyJ9.eyJpc3MiOiJodHRwczovL3RvdGFsY29tbW56LmF1LmF1dGgwLmNvbS8iLCJzdWIiOiJnb29nbGUtb2F1dGgyfDEwMzI5NzA4OTYyMTk5NjUwMjY2MiIsImF1ZCI6ImxTWUtXMUZZdENkMWJLQmdXRWN0MWpCbmtDU3R2dW5SIiwiaWF0IjoxNTA5ODYyMTI1LCJleHAiOjE1MTAyMjIxMjV9.kjmckPxLJ4H9R11XiBBxSNZEvQFVEIgAY_jj2LBy4sEJozBB8ujGE7sq9vEIjMms-Lv2q9WzFQPrqcxyBcYC4Je4QojMgvqLDCodtpot0QUle8QfGmonc1vZYIZyX-wqyOXtRqhoZVEKTeLhm9Le2CV4_a3BwgjkE1LjcDx01GZfsnaId8mh10kGk-DBmr5aVc8MxglLCq5Uk8Zbl2vDc__UMDgx1eQPQg-zve4fUf8zHcxizypYTnF_v0dEAT00L2j5J41SFYdWvP6ReQ3vhVYew2o9iM6u1s75HE-xW8s4pzV4BZAQtgfgIeCd6aVGZs76bcnQXBLej1B7zaPBvA 

Was ich versuche jetzt zu tun ist, das Token zu überprüfen jsonwebtoken verwenden. Das Token ist mit einem RS256 Algorithmus signiert.

heruntergeladen ich das Signaturzertifikat als .pem und ich bin erfolgreich es mit dem Token wie folgt zu überprüfen:

var cert = fs.readFileSync('certificate.pem'); 
jwt.verify(token, cert, {algorithm: 'RS256'}, (err, decoded) => { 
    console.log(err) 
    console.log(decoded) 
}); 

Was ich tun möchte, und es nicht funktioniert, ist das Token-Verifizierung mit das Geheimnis (das Client Secret in den Auth0-Client-Einstellungen genannt wird und eine Zeichenfolge ist).

jwt.verify(token, MYSECRET, {algorithm: 'RS256'}, (err, decoded) => { 
    console.log(err) 
    console.log(decoded) 
}); 

Dieser Code wirft immer einen Fehler:

{ JsonWebTokenError: invalid algorithm 
    at Object.module.exports [as verify] (C:\code\aws\learn-authorizer\node_modules\jsonwebtoken\verify.js:90:17) 
    at Object.<anonymous> (C:\code\aws\learn-authorizer\testme.js:25:5) 
    at Module._compile (module.js:624:30) 
    at Object.Module._extensions..js (module.js:635:10) 
    at Module.load (module.js:545:32) 
    at tryModuleLoad (module.js:508:12) 
    at Function.Module._load (module.js:500:3) 
    at Function.Module.runMain (module.js:665:10) 
    at startup (bootstrap_node.js:187:16) 
    at bootstrap_node.js:608:3 name: 'JsonWebTokenError', message: 'invalid algorithm' } 

Meine Frage ist: Wie kann ich die RS256-Token überprüfen Sie den geheimen Schlüssel zu verwenden die Zertifikatsdatei dagegen? (Ich habe auch versucht, einen neuen Client zu erstellen, der den HS256-Algorithmus verwendet, aber ich bekomme denselben Fehler).

+0

Versuchen Sie, Ihr jwt-Modul zu aktualisieren. –

+0

@AkshitGrover Ich benutze die neueste Version bereits –

Antwort

2

Wenn Sie mit nur ein geheimen Schlüssel dann mit RS256 nicht funktionieren, da es auf einem privates/öffentliches Schlüsselpaar basiert. Die Verwendung nur eines geheimen Schlüssels zeigt normalerweise H256 an. In meiner Antwort nehme ich an, dass das, was Sie MYSECRET nennen, nur der Inhalt von certificate.pem ist.

Anyways, würde ich die Zeichenfolge übernehmen hat

-----BEGIN RSA PRIVATE KEY----- 

und

-----END RSA PRIVATE KEY----- 

oder PUBLIC statt PRIVATE enthalten.

Sie können dies in source sehen. Die Linien in der Fehlermeldung erwähnt enthält:

if (!~options.algorithms.indexOf(header.alg)) { 
    return done(new JsonWebTokenError('invalid algorithm')); 
} 

und options.algorithms ist definiert als

if (!options.algorithms) { 
    options.algorithms = ~secretOrPublicKey.toString().indexOf('BEGIN CERTIFICATE') || 
         ~secretOrPublicKey.toString().indexOf('BEGIN PUBLIC KEY') ? 
         [ 'RS256','RS384','RS512','ES256','ES384','ES512' ] : 
         ~secretOrPublicKey.toString().indexOf('BEGIN RSA PUBLIC KEY') ? 
         [ 'RS256','RS384','RS512' ] : 
         [ 'HS256','HS384','HS512' ]; 

} 

Wenn Sie die RSA Dinge nicht am Anfang und es wird für die folgenden Algorithmen aussehen beenden: 'HS256','HS384','HS512'.

Ich habe nicht RS256 mit JWT vor, aber ich habe es mit ssh verwendet, und ich weiß, dass es sehr empfindlich auf die Kopfzeile ist. Die Zeichenfolge muss im genau richtigen Format sein.

1

Haben Sie versucht, den Algorithmus auf "HS256" zu setzen?

Nach der Auth0 docs bei https://auth0.com/docs/api-auth/tutorials/verify-access-token#verify-the-signature

For HS256, the API's Signing Secret is used. You can find this information at your API's Settings. Note that the field is only displayed for APIs that use HS256. 

For RS256, the tenant's JSON Web Key Set (JWKS) is used. Your tenant's JWKS is https://YOUR_AUTH0_DOMAIN/.well-known/jwks.json. 
Verwandte Themen