NAME
    JSON::WebToken - JSON Web Token (JWT) implementation

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

    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
    <http://tools.ietf.org/html/draft-ietf-oauth-json-web-token>