NAME

JSON::WebToken - JSON Web Token (JWT) implementation (draft version 00)

SYNOPSIS

use Test::More;
use JSON::XS;
use JSON::WebToken;

my $claims = {
    iss => 'joe',
    exp => 1300819380,
    'http://example.com/is_root' => JSON::XS::true,
};
my $secret = 'secret';

my $jwt = encode_jwt $claims, $secret;
my $got = decode_jwt $jwt, $secret;
is_deeply $got, $claims;

done_testing;

DESCRIPTION

JSON::WebToken is JSON Web Token (JWT) implementation for Perl

SEE ALSO http://tools.ietf.org/html/draft-ietf-oauth-json-web-token-00

THIS MODULE IS ALPHA LEVEL INTERFACE.

METHODS

encode($claims [, $secret, $algorithm, $extra_headers ]) : String

This method is encoding JWT from hash reference.

my $jwt = JSON::WebToken->encode({
    iss => 'joe',
    exp => 1300819380,
    'http://example.com/is_root' => JSON::XS::true,
}, 'secret');
# $jwt = join '.',
#     'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9',
#     'eyJleHAiOjEzMDA4MTkzODAsImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlLCJpc3MiOiJqb2UifQ'
#     '4ldFxjibgJGz_uaIRCIq89b5ipR-sbI2Uq7B2WNEDs0'

Default encryption algorithm is HS256. You can change algorithm as following:

my $pricate_key_string = '...';
my $public_key_string  = '...';

my $jwt = JSON::WebToken->encode({
    iss => 'joe',
    exp => 1300819380,
    'http://example.com/is_root' => JSON::XS::true,
}, $pricate_key_string, 'RS256');

my $claims = JSON::WebToken->decode($jwt, $public_key_string);

When you use RS256, RS384 or RS512 algorithm then, We need Crypt::OpenSSL::RSA.

If you want to create a Plaintext JWT, should be specify none for the algorithm.

my $jwt = JSON::WebToken->encode({
    iss => 'joe',
    exp => 1300819380,
    'http://example.com/is_root' => JSON::XS::true,
}, '', 'none');
# $jwt = join '.',
#     'eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0',
#     'eyJleHAiOjEzMDA4MTkzODAsImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlLCJpc3MiOiJqb2UifQ',
#     ''

decode($jwt [, $secret, $is_verify ]) : HASH

This method is decoding hash reference from JWT string.

my $claims = JSON::WebToken->decode($jwt, $secret);

add_signing_algorithm($algorithm, $class)

This method is adding signing algorithm.

# resolve JSON::WebToken::Crypt::MYALG
JSON::WebToken->add_signing_algorithm('MYALGXXX'   => 'MYALG');

# resolve Some::Class::Algorithm
JSON::WebToken->add_signing_algorithm('SOMEALGXXX' => '+Some::Class::Algorithm');

SEE ALSO JSON::WebToken::Crypt::HMAC or JSON::WebToken::Crypt::RAS.

FUNCTIONS

encode_jwt($claims [, $secret, $algorithm, $extra_headers ]) : String

Same as encode() method.

decode_jwt($jwt [, $secret, $is_verify ]) : Hash

Same as decode() method.

AUTHOR

xaicron <xaicron@cpan.org>

COPYRIGHT

Copyright 2012 - xaicron

LICENSE

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

SEE ALSO