前々から凄く参加したかった吉祥寺.pm へついに参加することができた!
しかし、電車関連のトラブルがいろいろ発生して見事に遅刻してしまった...
約20分の遅刻です。
— K (@CodeHex) 2017年10月20日
すみませんすみません #kichijojipm
今回はトップバッターでの登壇予定だったが、遅刻のせいで 3 番目くらいでの発表となってしまい、沢山の方々へ迷惑をかけてしまった。
(本当に申し訳ございませんでした!!)
今回登壇した内容はこれ。
本来は Perl6 で計算機を書いた話をしたかったが、色々忙しくてネタを作成するための時間が 1 日半しか取れず、完成しなかった。そのため、 JWT の貯めた知見について発表した。
登壇中 JWT の簡単なでもも行った。その時に使った WAF は Mojolicious で、 JWT に使ったモジュールは XAICRON さん作の JSON::WebToken である。
デモに用いたスクリプトがこちら。
#!/usr/bin/env perl use Mojolicious::Lite; use feature 'say'; use Data::Dumper; use JSON; use JSON::WebToken; my $secret = 'Sugoi secret'; my $master_user = "codehex"; my $master_pass = "12345678"; post '/authentication' => sub { my $c = shift; my $json = $c->req->json; my $user = $json->{username} || ''; my $pass = $json->{password} || ''; if ($user eq $master_user && $pass eq $master_pass) { my $claims = +{ sub => 1, iss => 'codehex-service', exp => time * 3600, name => $user, admin => JSON::true, }; return $c->render(text => encode_jwt($claims, $secret)); } $c->render(status => 401); }; get '/information' => sub { my $c = shift; my $auth = $c->req->headers->header("Authorization"); say $auth; return $c->render(status => 400) if !$auth || $auth !~ /^Bearer/; my $jwt = $auth =~ s/^Bearer (.*)$/$1/r; my $result; eval { $result = decode_jwt($jwt, $secret); }; if ($@) { warn "$@\n"; return $c->render(status => 500); } $c->render(json => $result); }; app->start;
後からセキュリティ関連に詳しい @mahoyaya さんに正しかったか聞いてみたところ、場合によるが、URL Safe とは言え URL に含めてやり取りを行うのはワンタイムトークンでない限り行うべきではない。と言った指摘を頂いた。
懇親会
懇親会は沖縄料理専門のお店「南ぬ (ぱいぬ) ニライカナイ」で行った。そこで、Perl6 や YAPC::Okinawa の話もできて良かった。主に charsbar さんから運営のアドバイスをもらえたため反映していきたい。
あとはそーだいさんとも話せて良かった。
凄く疑問に思ってたことを聞いた時に凄く納得できる回答が返ってきたため流石だなーと凄く感じた。
まとめ
本当に最高だった。あれだけの安定した大きな規模のコミュニティである吉祥寺.pm を @magnolia_k_ さん一人で運営できているのも凄いと思うし、毎回トークに応募してくれるリピーターも凄いなと感じた。
また機会があれば是非参加したいアットホームな Perl コミュニティだった!!
運営お疲れ様でした!!