aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/jwt-cpp/README.md
blob: 171661fb8ba70b1a2ccebeb80539540898a31d7b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# jwt-cpp 
 
[![Codacy Badge](https://api.codacy.com/project/badge/Grade/5f7055e294744901991fd0a1620b231d)](https://app.codacy.com/app/Thalhammer/jwt-cpp?utm_source=github.com&utm_medium=referral&utm_content=Thalhammer/jwt-cpp&utm_campaign=Badge_Grade_Settings) 
 
A header only library for creating and validating json web tokens in c++. 
 
## Signature algorithms 
As of version 0.2.0 jwt-cpp supports all algorithms defined by the spec. The modular design of jwt-cpp allows one to add additional algorithms without any problems. If you need any feel free to open a pull request. 
For the sake of completeness, here is a list of all supported algorithms: 
* HS256 
* HS384 
* HS512 
* RS256 
* RS384 
* RS512 
* ES256 
* ES384 
* ES512 
* PS256 
* PS384 
* PS512 
 
## Examples 
Simple example of decoding a token and printing all claims: 
```c++ 
#include <jwt-cpp/jwt.h> 
#include <iostream> 
 
int main(int argc, const char** argv) { 
	std::string token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXUyJ9.eyJpc3MiOiJhdXRoMCJ9.AbIJTDMFc7yUa5MhvcP03nJPyCPzZtQcGEp-zWfOkEE"; 
	auto decoded = jwt::decode(token); 
 
	for(auto& e : decoded.get_payload_claims()) 
		std::cout << e.first << " = " << e.second.to_json() << std::endl; 
} 
``` 
 
In order to verify a token you first build a verifier and use it to verify a decoded token. 
```c++ 
auto verifier = jwt::verify() 
	.allow_algorithm(jwt::algorithm::hs256{ "secret" }) 
	.with_issuer("auth0"); 
 
verifier.verify(decoded_token); 
``` 
The created verifier is stateless so you can reuse it for different tokens. 
 
Creating a token (and signing) is equally easy. 
```c++ 
auto token = jwt::create() 
	.set_issuer("auth0") 
	.set_type("JWS") 
	.set_payload_claim("sample", std::string("test")) 
	.sign(jwt::algorithm::hs256{"secret"}); 
``` 
 
## Contributing 
If you have an improvement or found a bug feel free to [open an issue](https://github.com/Thalhammer/jwt-cpp/issues/new) or add the change and create a pull request. If you file a bug please make sure to include as much information about your environment (compiler version, etc.) as possible to help reproduce the issue. If you add a new feature please make sure to also include test cases for it. 
 
## Dependencies 
In order to use jwt-cpp you need the following tools. 
* libcrypto (openssl or compatible) 
* a compiler supporting at least c++11 
* basic stl support 
 
In order to build the test cases you also need 
* gtest installed in linker path 
* pthread 
 
## Troubleshooting 
#### Missing _HMAC amd _EVP_sha256 symbols on Mac 
There seems to exists a problem with the included openssl library of MacOS. Make sure you link to one provided by brew. 
See [here](https://github.com/Thalhammer/jwt-cpp/issues/6) for more details. 
#### Building on windows fails with syntax errors 
The header "Windows.h", which is often included in windowsprojects, defines macros for MIN and MAX which screw up std::numeric_limits. 
See [here](https://github.com/Thalhammer/jwt-cpp/issues/5) for more details. To fix this do one of the following things: 
* define NOMINMAX, which suppresses this behaviour 
* include this library before you include windows.h 
* place ```#undef max``` and ```#undef min``` before you include this library