かえるの井戸端雑記

開発日誌的な記事だったり備忘録だったり。まとめ記事と言うよりは、七転八倒の様子を小説みたいに読んで眺めてもらえればと。

MojoでOAuth2を使ってみた

きっかけ

手元でuserとpasswordなんて管理したくない割に、そういうtoolを作ったりする機会が時々あるので、僕がよく使うperl moduleのmojoを用いてOAuth2あたりを用いてGoogleTwitterの認証と連携してUser認証出来るようにしてみたい。

で、どうやるのか

Mojolicious::Plugin::OAuth2 - search.cpan.org

こういうものもあるし、これを使えるようになればいいんじゃないかな。 どっかで仕様例を紹介してないかなあ。

ishitoya.hatenablog.com

あったあった。

Setup

まあ普通にcpanから落としてくる。

cpanm Mojolicious::Plugin::OAuth2

Googleの認証の有効化

……うん、とりあえずそのまま書いてみたけれど、よくわかっていない。 とりあえずGoogleで認証するための下準備をしよう。

d.hatena.ne.jp

  1. Google アカウントを作成(作成済みならば不要)
  2. Google Developers Console から、プロジェクトを作成、認証情報や、OAuth 用クライアントID等を取得
  3. Web アプリケーションに、Google と OAuth 認証する流れを実装

こういう手順らしい。

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と連携するのか。

d.hatena.ne.jp

  1. 【クライアント】ユーザー登録、認証ボタンをクリックした時、Google に対して OAuth 認証をリクエス
  2. Google】認証同意画面を表示し、その結果がクライアントへリダイレクトされる
  3. 【クライアント】認証が OK ならば、Google に認証コードとクライアント情報を送信、トークンを取得
  4. 【クライアント】取得したトークンを使い、GoogleAPI へアクセス(メールアドレスを取得)

こういう流れらしい。うんよくわからない。

とりあえず本家よろしく/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というのが得られているし。

ふうん。これを利用すればいいのか。

famirror.hateblo.jp

これで得られた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使うのもやめるかなあ。