MojoでOAuth2を使ってみた
きっかけ
手元でuserとpasswordなんて管理したくない割に、そういうtoolを作ったりする機会が時々あるので、僕がよく使うperl moduleのmojoを用いてOAuth2あたりを用いてGoogleやTwitterの認証と連携してUser認証出来るようにしてみたい。
で、どうやるのか
Mojolicious::Plugin::OAuth2 - search.cpan.org
こういうものもあるし、これを使えるようになればいいんじゃないかな。 どっかで仕様例を紹介してないかなあ。
あったあった。
Setup
まあ普通にcpanから落としてくる。
cpanm Mojolicious::Plugin::OAuth2
Googleの認証の有効化
……うん、とりあえずそのまま書いてみたけれど、よくわかっていない。 とりあえずGoogleで認証するための下準備をしよう。
こういう手順らしい。
Google Developers Console。いやそんなものない。Google Cloud Pratformに飛ばされた。 まあいいやprojectを作成。すぐできた。
とはいえAPIと認証なんて項目はない。まあ古いしなあ。
ああAPI Manager
というMenuがある。
ここで認証情報
からOAuth Client IDを作成。
お、Client IDとSecret Keyが生成された。
OAuth同意画面
というmenuもあるので形ばかり作成。
で、perlの方にはpluginとして、
plugin "OAuth2" => { google => { key => "client id", secret => "secret key", }, };
こんな感じで定義
pageへの組み込み
あとはどういう風にすればpageと連携するのか。
こういう流れらしい。うんよくわからない。
とりあえず本家よろしく/econnectを定義してみる。
あ、pageとんだ。でもinvalid requestだ。わはー。
scopeの定義がないというので探してみる。
OAuth 2.0 Scopes for Google APIs | Google Identity Platform | Google Developers
ここから適当に設定してみる。emailとがでいいか。plugin “OAuth2"で定義したgoogleの中にscope=>"email"
として定義。
お、無事認証用のpageにとんだ。とんだあとredirecで定義したところへとんだ。
dumpするとparamでcodeというのが得られているし。
ふうん。これを利用すればいいのか。
これで得られたtokenでmail addressなりを引っ張ってきて、こちらではmail addressとuser groupをsessionなりで管理すればいい、という仕組みらしい。
なんとなくわかった。
memo
Cent6.x系でcpanmでMojolicious::Plugin::OAuth2をinstallしようとしたら蹴られた。
cpanm IO::Socket::SSL@1.94
でぎりぎりの範囲におとして、Mojolicious::Plugin::OAuth2はsourceから落としてきたものをlocalに直接は位置して読ませたら利用できた。うーんむ。そろそろtest環境にcent6使うのもやめるかなあ。