シングルサインオン( SSO )とは一言でいうと「1つのパスワードを作れば全てのサービスにログインできる仕組み」です。
本日から、いくつかに分けて Laravel で SSO の作成についてエントリーしようと思います。
今回はそのイントロです。
設計
まず、Laravel の make:auth
を使って認証画面を作成します。
ただ、ログインに必要な ID と PASS は 別のサーバーに API として管理します。
ユーザーが ID と PASS を入力したら、APIサーバーに問い合わせて認証を行うようにします。
APIサーバーは DB に該当レコードがあるか検索し、結果を返します。
結果が ture ならマイページに、false ならエラーを表示するようにします。
図で表すと以下のようになります。
実際には「登録」「編集」「削除」機能も API に持たせたいのですが、まずは「ログイン」できるところまで作っていこうと思います。
準備
認証先を uses テーブルではなく、API のサーバーに変更させる作業があります。
Laravel の認証機能を大幅にカスタマイズすることになります。事前に Laravel の認証機能の仕組みを理解しないといけません。
Laravel の認証機能についての解説については以前エントリーしました。よかったら参考にしてください。
また、ユーザーから入力された ID と PASS は JSON に変換して API に送信します。
その際、PHPの file_get_contents関数
や stream_context_create関数
を使います。
この辺りの知識も自信がない方は、以前にエントリーしているので参考にしてください。
・file_get_contents を使ってPOST送信
・file_get_contents を使って JSON を送信
手順
STEP2.SSO の API を作成
STEP3.Laravel の認証画面に SSO の API に問い合わせるようにカスタマイズ
「STEP1」については artisanコマンドで make:auth
と打つだけです。
「STEP2」はリクエストがあったら認証処理をして結果を返すスクリプトを作成します。
一番難しいところは「STEP3」の認証画面のカスタマイズです。
ユーザーから入力された ID と PASS を JSON で API に送信して、APIの結果を受け取るスクリプトを作成します。
今回はイントロまで
以上です。
仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。