Undefined reference to `json_loads'
konstantin-doncov opened this issue · 6 comments
I'm trying to use your library in Qt project using these lines in the my .pro
file:
INCLUDEPATH += /usr/local/include/jwt
LIBS += -ljansson -ljwt -lcrypto -L/usr/local/lib
But I get these errors on the build stage:
/usr/local/lib/libjwt.a(jwt.cpp.o): In function `JWT::ExtractPayload(char const*, unsigned long)':
jwt.cpp:(.text+0x77b): undefined reference to `json_loads'
/usr/local/lib/libjwt.a(jwt.cpp.o): In function `JWT::Decode(char const*, unsigned long, MessageValidator*, ClaimValidator*)':
jwt.cpp:(.text+0xd41): undefined reference to `json_loads'
Makefile:333: recipe for target 'ProjectY_Server' failed
collect2: error: ld returned 1 exit status
How can I fix it?
Regards.
Do you have the libjansson-dev package (or similar) installed on your development system?
Yes, I had this library, but the problem probably in Qt - I deleted some statements in .pro file and then tried to bring them back, now all fine. I did not want to write until I understood exactly, so, sorry for the delay. But now I came to another misunderstanding (just don't want to raise your "issues" with non-issues, so, if you do not mind, I'll post it here): I want to use your library for Firebase token verification, as I understood, for this I need to do next:
- Get keys dictionary from this link
- Read
kid
field of the token - Use
kid
field of the token as key for keys dictionary and get corresponding value. This is should be a public key - Verify token using this public key
As I also understood, there is an another way which you used in your library: we can put ALL dictionary in the json message validator
and JWT::Decode
will do all what we need. But not everything is so good: if I just will put Google dictionary as follows:
std::string JSON_VALIDATORS =
"{ \"set\" : [ "
" { \"RS256\" : { \"70a762492bfb611b371c0a1ffbd9efa473c9ecc0\" : \"MIIDHDCCAgSgAwIBAgIIAPBNQDY/y1cwDQYJKoZIhvcNAQEFBQAwMTEvMC0GA1UE\nAxMmc2VjdXJldG9rZW4uc3lzdGVtLmdzZXJ2aWNlYWNjb3VudC5jb20wHhcNMTcw\nNzI1MDA0NTI2WhcNMTcwNzI4MDExNTI2WjAxMS8wLQYDVQQDEyZzZWN1cmV0b2tl\nbi5zeXN0ZW0uZ3NlcnZpY2VhY2NvdW50LmNvbTCCASIwDQYJKoZIhvcNAQEBBQAD\nggEPADCCAQoCggEBAM1/3B6VhD71iA7lTzRB/KhslCFeMY5YmiKQcD1UNhHYJ60k\nq+tozMMU0VEJF3Qmui2FzgYVBvquvUYNyHgVqVh6k5vdBAoSukWwIgKKtuHcFh1M\naG2mU63u2eKkmxGansokb+hVwfulraEGDT7rlukVHPcCU4oQwcY3mea1a+jFjntb\nRv92qTAAK8mJEaAfPiFXoQBt5ZhjPITSCJvXDkdxMicQrxxtOOz2HCHX1nY2A9t0\nl87+PWTMGcASEsFs0C4PhTI2wRjlhvhdto2q3DGJbTysBzFk31QxH1WjHFDi8y6P\ng87uhB96XFFaNJ+aYrORkDxCEIitfBIgCShtI7MCAwEAAaM4MDYwDAYDVR0TAQH/\nBAIwADAOBgNVHQ8BAf8EBAMCB4AwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwIwDQYJ\nKoZIhvcNAQEFBQADggEBALnKIZsbEsntTmFOvC8cYAdUYy42icd1LNTOmhfpAUac\nAZjkXM4cIbXniY9g8S8W6ElCp/wuti8H6GZ9y+1WsCqXRRc+E5fpJE6pz26izhKS\nPKlS5vL8/qUCt3phHB+aW7OBboDmZLGWjp0x+bnh1B0SXHQgnr98Dar+/JsORYw7\nW5VF2AzaeIezXHSYSZo/N7z+CCX8vy+Zae6v+3jaBN3sDopjBU0+k6ytMIU3G9o2\nGZfLvNnGsBE64IDLtwoNMZ1clioI32BkzIRu04yj4gGN1ao3Hag7RiIZdfcxV1Aa\nWBZB8S3kqp8WYQi8bOvyR0itYD9tTY1kYyyhDfi8HIc=\" } }, "
" { \"RS256\" : { \"c796ac2a25d486d1a281ada882c4741ae1567957\" : \"MIIDHDCCAgSgAwIBAgIINg63FEqexA0wDQYJKoZIhvcNAQEFBQAwMTEvMC0GA1UE\nAxMmc2VjdXJldG9rZW4uc3lzdGVtLmdzZXJ2aWNlYWNjb3VudC5jb20wHhcNMTcw\nNzIzMDA0NTI2WhcNMTcwNzI2MDExNTI2WjAxMS8wLQYDVQQDEyZzZWN1cmV0b2tl\nbi5zeXN0ZW0uZ3NlcnZpY2VhY2NvdW50LmNvbTCCASIwDQYJKoZIhvcNAQEBBQAD\nggEPADCCAQoCggEBAJNinfl97yB1YtYdSGmD9DKxakGH0wK4dAZUJG+s1mauJM3S\nIyiNEWkXVH/EJB3FGhZuWTjcG4DXh1B8L7dnVhZ2E4JPyhUxOcXbSqB5ZwjkwbwN\npJOidGOVX2QsZkOxY5qS0X73sZAel5bpUJUwf+JIyOqZ9NfX78lcbYeZ7fE2gUN2\nSk/jU6ZPDkd+0daKzdbmK4ApUcOEl5N+5SwSrI9fRrMG0HqXll8HJcVSRtjUG/CA\n04jBaPwKfTmUuVA5/StaxAW7So9Y6lO3lG6JcmCxPepP5D3MKnFryTekc9mEy23l\nwsYOuGLcNu3vHFnG3k42K81x2S9pym+X1uKI7GUCAwEAAaM4MDYwDAYDVR0TAQH/\nBAIwADAOBgNVHQ8BAf8EBAMCB4AwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwIwDQYJ\nKoZIhvcNAQEFBQADggEBAB4wMB7WVMl/OrBYdmrkJ80odi0uFSI5K7X/IxG8k31z\nh+3ZtX6mMMUxXqNKv7VNiJ8k6hrbc1XwhLAFm2XaIb/i/z7SjbKP2oBLv/QRT1Wi\n4pc7Kva0FXdPzpFHsHe5WpLD7Ur6VbL4/Itwn7AthEhmnHCt1UfRGNyWf+rSgZDT\nXmjB+WeYndHP/9NRMF4y55WpTkdxnk0t2SpyqHfGtvKW9QzLqzpH0Ja5u+zxFqZT\nzOlPeYCO8XRSXSvXJlNpq1BI2t+sq9If7EXhbdGXHOw9YdzrOJYBPHbjh2omVhcn\ngKRaSvKLRloSog6bhL26yB3ISt9rDCPopV8+33FVYiY=\" } }, "
" { \"RS256\" : { \"d3576b4458bb6fa5870bc997d10d7d738dd483ff\" : \"MIIDHDCCAgSgAwIBAgIIL2OAbSxKt98wDQYJKoZIhvcNAQEFBQAwMTEvMC0GA1UE\nAxMmc2VjdXJldG9rZW4uc3lzdGVtLmdzZXJ2aWNlYWNjb3VudC5jb20wHhcNMTcw\nNzI0MDA0NTI2WhcNMTcwNzI3MDExNTI2WjAxMS8wLQYDVQQDEyZzZWN1cmV0b2tl\nbi5zeXN0ZW0uZ3NlcnZpY2VhY2NvdW50LmNvbTCCASIwDQYJKoZIhvcNAQEBBQAD\nggEPADCCAQoCggEBAIz9m467yLxK4kY5JjDCSQgmAyQhCCfXL7ZU1Ou0vUM7ijI0\ndNdshIPrz4NuNiW9FNLMeV/IlqPFaiHmWq3BGJGXaZTKzDQ78y9K2Q91YuUjhV1p\nIbTNWsYz93zo7mCRVmNCjjISDKV1Li8uTHZEIy42l40HgGkB/LtI2pQpPehoyTER\nu4C7xD+rWypQskI8OvHT5CNk0D12ZIVB4D9eVgp9BDco7UaeAoBVLfZWSDzu+cKs\nNDiDeXpPWB9C1QGJ3nkoJ+prFNoB6wsWPYknNblDgjLFVj13K0aQX1EVZRtvnn9e\nMwBIcAFAIuGDpaA4ciCmDXRZLgA1yNx9S3WhhJkCAwEAAaM4MDYwDAYDVR0TAQH/\nBAIwADAOBgNVHQ8BAf8EBAMCB4AwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwIwDQYJ\nKoZIhvcNAQEFBQADggEBABFVjlZY1tPB7+tN4WOnzGUmkQt191n/voP8Oz7MCJg6\nU6C72/Uk01oFvAZ+9IbN23zIqYFRxUqo1rmWUv4ku2+u8PqvhxuvGnGd5h3Sr4sN\nAdAw/VxtFYprV4cHn6IsMSZgX99lrTyaqjT7KPNBWHKrgu99iAeO1MWPQt0qHCFW\nsCb4CG/55CEBWqWWCi/xoOzFDfYatlkHUuhMl8XQH/vkYPb/N/1Xl/iQ8gXpo9BU\nddV3i9PXCT+X9xcGx4udrBUBDGmB7QuxdYkbHF48QRYQO+kiRsugZcYCiPW8lRX0\nTAmaA+OLJcEsk+MXFJRONmLBkkEMznrg5aTIy5AcEAw=\" } }, "
" { \"RS256\" : { \"298704e844bc6d9842b7742d123792a9fc53cefd\" : \"MIIDHDCCAgSgAwIBAgIIaf3mz/CwobUwDQYJKoZIhvcNAQEFBQAwMTEvMC0GA1UE\nAxMmc2VjdXJldG9rZW4uc3lzdGVtLmdzZXJ2aWNlYWNjb3VudC5jb20wHhcNMTcw\nNzI2MDA0NTI2WhcNMTcwNzI5MDExNTI2WjAxMS8wLQYDVQQDEyZzZWN1cmV0b2tl\nbi5zeXN0ZW0uZ3NlcnZpY2VhY2NvdW50LmNvbTCCASIwDQYJKoZIhvcNAQEBBQAD\nggEPADCCAQoCggEBALVso9L1xazbrgWSgSaol+84vXRw1X/M4EcywlfIQDBoLhOB\ngbC3SABE9iceXMxTARlxRMIs18584ZM2f3bY1ocWNsbL/Of1Yolf3YIyStjcn1k0\nk1zmo6kVebaFAYVl21rsQtnZ1snrC3vSLQ4mlgMwmDTc/j52IcP1h50eWksVtkVh\n4tIqK06KYxAq0cLDsfdb+sYyi2dCI2HAxRpF6HxPXrN8lYXgUbnrMfQwFadaXkO0\nPqUQwGC5K1kQgMnwVOjWe6bYSNUYQG7LF6jvS2+h4cHLFqos2VDi1L/zhAQgvQJc\njjedHCUfHD2FbdrM/woiOUsI93XwRQl7T285/UUCAwEAAaM4MDYwDAYDVR0TAQH/\nBAIwADAOBgNVHQ8BAf8EBAMCB4AwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwIwDQYJ\nKoZIhvcNAQEFBQADggEBAFT5oiPQ0ehouVInB4reaGEFCVzfg+mvBGH/n8UTLwd3\ntZ3VOj9lIIA2GlT6M6FPA9GU2OXHNo2aWPO2rpjQVee9g0fSS9lJiGGdb5jrZMkI\nwkSZW4/YIo7otydjadI5CYQXaplTqQVj6C+OCRWgMOQ/YkanUIiQVqno8IzoWSEk\n9F51DIYcChI88NNgkcrkQAukf8z8pBldoTM+3JqTjwuSr33ZW7wFjUQfCOr17AAl\n+xGihBVfAilJXjsDnIrNRipgWMheD2t6geIX/Zzi2RUlC0YbOAH9mtNZwzSbe5j3\nJ+cLX2iWoH/UgtLi7j7DZMKB1c7bdExJWWqyTr7Qsa0=\" } } "
" ]"
"}";
Then I will get:
terminate called after throwing an instance of 'std::logic_error'
what(): Failed to parse JSON: unexpected newline, at line: 1, col: 138
Then I tried to remove all \n
chars and got this:
terminate called after throwing an instance of 'std::logic_error'
what(): Json error inside: parsing secret, property: public is missing from:
So, what I should to do for verifying Firebase token?
Now I understood that I need to use kid
, but I can't use kid
with the public key:
const char *json = "{ \"kid\" : { "
"\"key1\" : { \"RS256\" : { \"public\" : \"key1\" } }, "
"\"key2\" : { \"RS256\" : { \"public\" : \"key2\" } }, "
"\"key3\" : { \"RS256\" : { \"public\" : \"key3\" } } "
"} }";
validator_ptr validator(MessageValidatorFactory::Build(json));
Leads to:
terminate called after throwing an instance of 'std::logic_error'
what(): Json error inside: error:0906D06C:lib(9):func(109):reason(108)
So, how can I fix it or what can I use as an alternative?
The set one is ill formatted json. I will add a unit test to validate the last one. Note, I'm rewriting the library to get rid of jansson.
The cryptic error indicates that RSA validator does not understand that "key1" is an actual key. For rsa this needs to be a PEM formatted string. See https://support.quovadisglobal.com/kb/a37/what-is-pem-format.aspx
The library is no longer jannson