LaravelでSSOのAPIを作成

2019/07/19

今回、Laravelで「SSOのAPI作成」について連載記事をエントリーしました。

SSO(シングルサインオン)とは一つのパスワードを使えば全てのサービスにログインできる仕組みです。

この演習を通してAPIの公開ができるようになります。

作成するにあたって、

・Laravelの自動認証機能のソースコードを解析
・PHPのストリームコンテキストを使ってJSONデータを送信
・CSRFトークン部分解除

を行いました。

また個人的にはまったところは「クライアント側にもログイン情報のテーブルが必要」というところです。

個人的に難しかったので、今回の連載記事は「チュートリアル上級」にカテゴライズしました。

内容は難しいですが、その分スキルも上がると思います。

 

ポイント

Auth周り

laravelのmake:authで自動生成される認証機能の本体を見つけるには、トレイトを追っていかないと見つけられません。

僕は今まで名前空間とトレイトをきちんと理解していませんでした。

名前空間のuseとトレイトのuseがごっちゃになっていました。

しかし、ここのソースコードを読むにあたって知識を整理しました。

 

file_get_contents でPOST送信

file_get_contents関数はHTMLをゲットすることしかできない訳ではありません。

stream_context_create関数もあわせて使うとPOST送信することもできます。

今回、APIに入力データを送信して結果を受け取る処理をするのに file_get_contents を使います。

curlを使うやり方もあります。

そもそも僕はPHPでAPIを叩くことをしたことがなかったので、勉強になりました。

 

csrt_tokenチェックを一部無効

Laravelの場合、外部からPOST送信される場合、csrf_tokenのチェックを無効にする必要があります。

全てのURIに対してcsrf_tokenを無効にすると、セキュリティ的に問題なので特定ルートだけ無効にしました。

ここは事前にミドルウェアについて理解していないとできません。

 

DBはクライアント側にも必要

Laravelでは認証用のデータをAPIだけに持たせることができませんでした。

クライアント側にも認証用のレコードが必要になります。

つまり、APIでの結果が true の場合は、クライアント側のテーブルにレコードをコピーする必要があります。

ここはハマりました。なんで?

 
現時点ではログイン認証だけですが、ゆくゆくは「編集」「削除」機能も機能追加していこうと思います。

以上です。

 

PHPフレームワーク Laravel入門

僕がはじめてLaravelを学習するために参考にしたサイトは、掌田津耶乃(しょうだつやの)さんの libro というサイトです。当時(2016年)、Laravel学習サイトの中でもこのサイトは群を抜いてわかりやすく説明されていたので、とても勉強になったのを覚えています。この本は掌田津耶乃が書いた本なので、わかりやすく解説されているだろうと kindle で購入しました。2019年7月の時点でいうと日本国内にて唯一の Laravel の良書と言っても良いかと思います。しかし、かなりわかりやすく解説されているとはいえ、PHP中級者以上のスキルは必要です。PHP自体の知識が乏しい方は独習PHP 第3版をあわせて購入することをお勧めします。

Amazonで詳細を見る

オススメ

 

本庄マサノリ

仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら

>> Twitter をフォローする

 

-チュートリアル, 上級