だいぶあったかいんだがもう春か?まだ2月半ばだぞ。
花粉で目と鼻がかゆい。
イベントは終わった。 結局プラモの写真を撮って上げたくらいなんだけど、写真撮るのに一日かかっちゃったし、今までの写真も合わせて上げたら100枚とかなってそこそこ大変だった。
ファイル貼るのは苦労したかいがあってなかなか使いやすかったが、まだ気になるところはあったのでもう少し改良したいな。 あと投票とかのブロックが欲しいなと思った。
Azure Active Directory B2Cを使いたいと思った。
Active Directoryとかいうとユーザー管理の仕組みとかで個人で使うもんじゃねえ感じあるんだけど、このB2CってやつはWebサイトでアカウント登録できるようにしたい時にアカウント登録とか認証とかをやってくれるOpenID ConnectのIdPを作れるサービスだ。 パスワードとかメールアドレスを登録してアカウントを作るだけでなく、TwitterとかMSアカウントとかGoogleアカウントみたいなのでログインも設定できる。 こういうの自分で作るのも当然できるけど、安全に作って管理するのは大変だし外に出せるなら出したいよね。
他にもそういうのはいくらもあるが、AAD B2Cが良いところは値段。月のアクティブユーザー数5万までは無料。なにそれ個人で作るサイトレベルでは無料ってことじゃないですか。 というわけで使おうと思った。
さて使ってみると結構大変だ。まず作ろうとしたらサブスクリプションがない。これは無料試用版のサブスクリプションを作った。今までMSDN特典以外でAzure使ってなかったんだっけ。
Azure Active Directory B2Cを作ってみるが、なぜかリソースグループのリージョンがおかしいとか言われて作れない。東日本じゃだめなんかと思ったが他でもダメだった。 仕方ないのでリソースグループは同時に作るんじゃなくて、単体で手動で作ったやつを使うようにした。
今度はリソースプロバイダーがないとかいうエラーが出る。初めて見たけどなんだろうそれ。ここを見ろというドキュメントのURLが表示されるが、なんか関係ないようなドキュメントに飛ばされて意味がわからない。検索したら正しいドキュメントが見つかって、手順通りにやったらすぐ解決した。
あとはもうアプリ登録すればいいだけかな?とやってみると、ユーザーフローというのを追加しないといけないようだ。よくわからないが、まあやっとけばいいんだな。サインアップとサインイン両方できるやつを選んどいた。これはどの画面に飛ばしますかってやつっぽいな。
準備は出来たっぽいので使ってみよう。
導入したいRubyのWebアプリがあるので、これに追加する。omniauth_openid_connectってのがあるので入れて……と思ったらomniauthの2.0に対応してないようだ。どうしようかと考えたが、べつにomniauthがちょっと古くてもいいやということでomniauthのバージョンを下げた。
OpenID ConnectのDiscoveryを使うと設定が簡単なようだ。でもomniauth_openid_connectのDiscoveryはIssuerのURLからメタデータ用のURLを作って設定を取得するようだが、どうもAAD B2Cのエンドポイントを見るとIssuerのURLとメタデータ取得用のURLが結構違う……。試しにやってみるがやっぱ取得できねえわ。手動で設定しよう。
設定できたら無事ユーザー登録とログインが出来るように……なってないな。アクセストークンが返ってこなーいってエラーが出る。確かにアクセストークンを取得したいところでid_tokenしか返ってきてないみたい。でもAAD B2Cのアプリ側ではむしろアクセストークンしか使わないように設定されているような。
ドキュメントを探してみると、標準のスコープだけではアクセストークンは返ってこないみたい?でも他のスコープも指定しているつもりなんだが……?と追加のスコープも渡してみるがやっぱりだめだ。omniauth_openid_connectがスコープをちゃんと渡してくれてないんじゃないかという気もするなあ。
一旦諦めてid_tokenだけ使うようにomniauth_openid_connectを設定してみる。これでいったと思いきや、今度はトークンの検証に失敗したとか出る。意味がわからん……。調べてみるとomniauth_openid_connectのissueに同じのが上がってて、みんなくらってるけどなかなか解決できてないようだ。 Discoveryを使うと上手くいくっぽい話もあるんだけど、AAD B2Cだとomniauth_openid_connectでDiscovery使えねえんだよなあ。
あと一歩なんだけどもう深夜になってしまったのでさすがに諦めた。ライブラリが動かねえあたりうーんRuby……って感じするな。 まあそんなに難しいもんではないので自分でいくらかいじってみよう。