Go to file
Vincent Prouillet 4c6fa49450 Add a bit about validation 2015-11-03 18:38:41 +00:00
benches Remove useless import + improve readme 2015-11-02 23:32:32 +00:00
examples Better example 2015-11-03 16:00:52 +00:00
src Make Algorithm encodable/decodable rather than using String 2015-11-02 23:12:01 +00:00
.editorconfig Initial commit 2015-10-31 15:37:15 +00:00
.gitignore Initial commit 2015-10-31 15:37:15 +00:00
.travis.yml Add example + travis 2015-11-02 20:34:11 +00:00
Cargo.toml Rename to jsonwebtoken 2015-11-02 23:27:28 +00:00
LICENSE Move benches to a folder + add license 2015-11-02 21:15:45 +00:00
README.md Add a bit about validation 2015-11-03 18:38:41 +00:00

README.md

jsonwebtoken

Build Status

Installation

Add the following to Cargo.toml:

jsonwebtoken = "0.1"
rustc-serialize = "0.3"

How to use

There is a complete example in examples/claims.rs but here's a quick one.

In terms of imports:

extern crate jsonwebtoken as jwt;
extern crate rustc_serialize;

use jwt::{encode, decode, Algorithm};

Encoding

// encode<T: Part>(claims: T, secret: String, algorithm: Algorithm) -> Result<String, Error>
let token = encode::<Claims>(my_claims, "secret".to_owned(), Algorithm::HS256);

In that example, my_claims is an instance of the Claims struct.
The struct you are using for your claims should derive RustcEncodable and RustcDecodable.

Decoding

// decode<T: Part>(token: String, secret: String, algorithm: Algorithm) -> Result<T, Error>
let claims = decode::<Claims>(token.to_owned(), "secret".to_owned(), Algorithm::HS256);

In addition to the normal base64/json decoding errors, decode can return two custom errors:

  • InvalidToken: if the token is not a valid JWT
  • InvalidSignature: if the signature doesn't match
  • WrongAlgorithmHeader: if the alg in the header doesn't match the one given to decode

Validation

Right now, the library only validates the algorithm type used but does not verify claims such as expiration. Feel free to add a validate method to your claims struct to handle that.

Algorithms

Right now, only SHA family is supported: SHA256, SHA384 and SHA512.

Missing

The header is currently not customisable and therefore does not support things like kid right now.

Performance

On my thinkpad 440s for a 2 claims struct using SHA256:

test bench_decode ... bench:       7,106 ns/iter (+/- 5,354)
test bench_encode ... bench:       3,453 ns/iter (+/- 140)