Skip to content

Instantly share code, notes, and snippets.

@zigorou
Created June 26, 2014 05:47
Show Gist options
  • Save zigorou/ba5a73a35befcbc24c58 to your computer and use it in GitHub Desktop.
Save zigorou/ba5a73a35befcbc24c58 to your computer and use it in GitHub Desktop.
Making JSON Web Signature (JWS)
#!/usr/bin/env perl
use strict;
use warnings;
use feature qw(say);
use Digest::SHA qw(hmac_sha256);
use JSON;
use MIME::Base64 qw(encode_base64url decode_base64url);
use JSON::WebToken qw(decode_jwt);
our $SHARED_SECRET = "minna_niwa_naisyo_dayo";
my $jws_header = encode_json(+{
alg => "HS256",
typ => "JWT"
});
say $jws_header;
my $encoded_jws_header = encode_base64url($jws_header);
say $encoded_jws_header;
my $jws_payload = encode_json(+{
"iss" => "joe",
"exp" => 1300819380,
"http://example.com/is_root" => JSON::true
});
say $jws_payload;
my $encoded_jws_payload = encode_base64url($jws_payload);
say $encoded_jws_payload;
my $signature_base_string = $encoded_jws_header . "." . $encoded_jws_payload;
my $signature = encode_base64url(hmac_sha256($signature_base_string, $SHARED_SECRET));
say $signature;
my $jws = $signature_base_string . "." . $signature;
say $jws;
my $payload = decode_jwt($jws, $SHARED_SECRET);
say encode_json($payload);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment