鈍足ランナーのIT日記

走るのが好きな5流のITエンジニアのブログ。

趣味の範囲は広いけど、どれも中途半端なクソブロガー楽しめるWebアプリを作ってあっと言わせたい。サーバーサイドPerl(Mojolicious)、クライアントサイドVue.js。Arduinoにも触手を伸ばす予定。

auth0 の JWT のverifyをPerl(Mojolicious)でする方法

こちらでverifyのデバッグできるので参考にしつつ。
https://jwt.io/

Mojo::JWTというモジュールを使ってやります。
secretもbase64urlデコードする必要があるというところで
はまりました。

package StampMaker::Service;

use Mojo::Base 'MojoX::JSON::RPC::Service';
use Data::Dumper;
use Mojo::JWT;
 
use Mojo::JSON qw/encode_json decode_json/;
use MIME::Base64 qw/encode_base64url decode_base64url/;

my @METHODS = qw/ save load /;

sub new {
    my $class = shift;
    my $self = $class->SUPER::new(@_);

    for(@METHODS){
        $self->register(
            $_ => \&{$_},
            {
                with_self => 1.
            }
        );
    }

    return $self;
}

sub save {
    my ($app, $param) = @_;

    my $authorization = $app->req->headers->header("authorization");
    my ($str) = (split / /, $authorization)[1];
    my $base64_encoded_secret = 'your_secret';
    my $secret = decode_base64url($base64_encoded_secret);

    my $jwt = Mojo::JWT->new(  secret => $secret);
    eval{
      my $decode = $jwt->decode($str);
      print Dumper($decode);
    };
    if ($@){
        warn($@);
    }
    
    return "ok";
}


1;