jonasroussel / dart_jsonwebtoken

A dart implementation of the famous javascript library 'jsonwebtoken'
MIT License
87 stars 29 forks source link

Failure to sign JWT using RSA key #49

Open dawid86 opened 9 months ago

dawid86 commented 9 months ago

Hi!

I faced an issue using your library to sign JWT with an RSA key.

I use Dart to create code for handling Firebase Functions, so here's my pubspec.yaml:

name: functions
version: 1.0.0
environment:
  sdk: '>=2.9.0 <3.0.0'
dependencies:
  firebase_functions_interop: ^1.0.2
  dart_jsonwebtoken:
  jaguar_jwt:
  uuid:
dev_dependencies:
  build_runner: ^1.9.0
  build_node_compilers: 

I'm using Dart 2.9.3, because node compilers do not support Dart v3.

I'm testing it using your samples:

void rs256() {
  String token;

  /* Sign */ {
    // Create a json web token
    final jwt = JWT(
      {
        'id': 123,
        'server': {
          'id': '3e4fc296',
          'loc': 'euw-2',
        }
      },
      issuer: 'https://github.com/jonasroussel/dart_jsonwebtoken',
    );

    // Sign it
    final pem = '''
-----BEGIN RSA PRIVATE KEY-----
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
-----END RSA PRIVATE KEY-----
''';
    final key = RSAPrivateKey(pem);

    token = jwt.sign(key, algorithm: JWTAlgorithm.RS256);

    print('Signed token: $token\n');
  }
}

But failing with error:

Error: Value of "this" must be of type nullish or must be the global object

An interesting fact is that HMAC key (SecretKey) works.

I'd appreciate your support.

(PS - this is test Private Key, so I have no issue with sharing it here ;) )

jonasroussel commented 9 months ago

Hey @dawid86,

I installed an old version of Dart to try to run this code but I faced multiple problems during pub get without ever finding a solution to install the packages. Unfortunately, on closer examination, I think the problem come from the pointycastle library (the one used for RSA/ECDSA) and I don't think I can solve your problem...

I'll leave that issue open, maybe someone will have a solution. I will also continue my research on this problem.