Azure AD B2CをPHPと使う (4) Laravel用のサンプルを解析、実運用へ

Azure-SamplesにあるLaravel用のサンプルは、現在は公式ドキュメントからのリンクこそないですが、基本的な実装を学ぶには十分でしょう。

トークンの検証部分は、githubのコードを参照すると、

active-directory-b2c-php-webapp-openidconnect/app/Http/Controllers at master · Azure-Samples/active-directory-b2c-php-webapp-openidconnect · GitHub

active-directory-b2c-php-webapp-openidconnect/app/Http/Controllers/

にある、EndpointHandlerクラスとTokenCheckerクラスです。

基本的な流れは、先に書いた記事と同様です。

noopable.hatenablog.jp

 

最新のB2Cと違うのはエンドポイントくらいでしょうか。

 

実運用を考慮

サンプルは上記でよいと思います。

が、このままでは使えないので、実運用に使っていくにはどうするか。

phpseclibは、サンプルの作成については、v1の方が直でクラスをロードしやすいですが、実運用ではv2の方でいいかなと思います。

EndpointHandler

まず、エンドポイントからの情報取得をリクエストがある度に行うのは、レスポンスが著しく悪化しますし、失敗した場合に認証失敗となっていたのではあり得ないと思いますので、キャッシュすること。できれば、キャッシュするだけではなく、実行環境ではcronなどで定期実行しておきたいですね。

キーリストは1時間に1回くらい更新されるそうです。

EndpointHandlerのエンドポイントデータの取得については、エラー処理を入れておきたいところ。

TokenChecker

検証をOPENSSL_ALGO_SHA256に決め打ちなんですが、jwtから取得しなくていいんでしょうか・・・

その他

その他、くせのあるコード部分については、各プロジェクトの規約に合わせて変更する形になるかな、と思います。