Created
March 27, 2012 07:54
-
-
Save ritou/2213834 to your computer and use it in GitHub Desktop.
Generation and Validation JWS using Acme::jWT
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/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' | |
| }; |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
RSAの方の処理がうまくいかないので後で追加する。