Skip to content

Instantly share code, notes, and snippets.

@ritou
Created March 27, 2012 07:54
Show Gist options
  • Select an option

  • Save ritou/2213834 to your computer and use it in GitHub Desktop.

Select an option

Save ritou/2213834 to your computer and use it in GitHub Desktop.
Generation and Validation JWS using Acme::jWT
#!/usr/bin/env perl
use strict;
use warnings;
use Acme::JWT;
use JSON::XS;
use Data::Dumper;
use Crypt::OpenSSL::RSA;
use Convert::PEM;
# HS256
my $payload = {
client_id => q{joe},
user_id => q{1300819380},
"http://example.com/is_root" => JSON::XS::true
};
my $secret = "1234567890";
print "HS256 JWT\n";
print Data::Dumper->Dump([$payload], ['$payload']);
print Data::Dumper->Dump([$secret], ['$secret']);
my $jwt = Acme::JWT->encode($payload, $secret, 'HS256');
print Data::Dumper->Dump([$jwt], ['$jwt']);
my $decoded = Acme::JWT->decode($jwt, $secret, 1);
print Data::Dumper->Dump([$decoded], ['$decoded']);
print "\n";
my $pkeyfile = "private_np.pem";
my $pkey = readKey($pkeyfile);
print "RS256 JWT\n";
$jwt = Acme::JWT->encode($payload, $pkey, 'RS256');
print Data::Dumper->Dump([$jwt], ['$jwt']);
my $pubkeyfile = "pub.pem";
my $pubkey = readKey($pubkeyfile);
$decoded = Acme::JWT->decode($jwt, $pubkey, 1);
print Data::Dumper->Dump([$decoded], ['$decoded']);
print "\n";
# とりあえずパスフレーズなしのみ対応
sub readKey {
my ($file) = @_;
my $key_string;
open(PRIV,$file) || die "$file: $!";
read(PRIV,$key_string,-s PRIV); # Suck in the whole file
close(PRIV);
$key_string
}
===
$ perl sample_jws.pl
HS256 JWT
$payload = {
'http://example.com/is_root' => bless( do{\(my $o = 1)}, 'JSON::XS::Boolean' ),
'client_id' => 'joe',
'user_id' => '1300819380'
};
$secret = '1234567890';
$jwt = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vZXhhbXBsZS5jb20vaXNfcm9vdCI6dHJ1ZSwiY2xpZW50X2lkIjoiam9lIiwidXNlcl9pZCI6IjEzMDA4MTkzODAifQ.m5b7Ykx82bVtcpVUrACB7SfJ8RxBWbP7QtiC4ZH7W3k';
$decoded = {
'http://example.com/is_root' => bless( do{\(my $o = 1)}, 'JSON::XS::Boolean' ),
'client_id' => 'joe',
'user_id' => '1300819380'
};
RS256 JWT
$jwt = 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vZXhhbXBsZS5jb20vaXNfcm9vdCI6dHJ1ZSwiY2xpZW50X2lkIjoiam9lIiwidXNlcl9pZCI6IjEzMDA4MTkzODAifQ.bIWUB8qPsty9xXTo77J8Rd27KNvBfSJsKN4Q6eWi-eXIdfy9exqmvMcpoxLIsdAJOwz4IY7lN_GX2ueav4JHjESLG0CiNmXTWrN8cCG__Usyi5VICYiFDBphe1wwsr9pSSzzn_ZcYxJQfoBBvHI5HrZY7GWT0l3vwk-NcSAb9GDviDw4zmQoGQdWqPN0OVGkHW01CLnPI25EMuLbRQehAs2lSMjuRvtf7tKAoTozTSjrQscsyiBafALVl5KpdMpng1p-6676Nfs0IeYNwrQ-aRK0D_dLjD3n3ksRFbd5k7txlMTYzKUr2g4OOefNIGnywZwsvLFXERGJ9LPwSlLtUg';
$decoded = {
'http://example.com/is_root' => bless( do{\(my $o = 1)}, 'JSON::XS::Boolean' ),
'client_id' => 'joe',
'user_id' => '1300819380'
};
@ritou
Copy link
Copy Markdown
Author

ritou commented Mar 27, 2012

RSAの方の処理がうまくいかないので後で追加する。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment