Archive for 12月, 2018

Laravelの認証/認可。Auth,Gate,Policyの再整理

by codechord. 2 Comments

アドベントカレンダーに触発されて、記事を書いたところ、ちょうど枠に空きが出たので、投稿したいと思います。

Laravelのドキュメントって結構分かりやすく書かれている方だと自分は思っているんですけど、今日はその中でもこんがらがりがちな「認証と認可」について今一度、整理したいと思います。どういうケースに使えるのかとか。
なお、「認証」の方はartisan make:authしたら概ね完成しちゃいますが、認可って便利なので、認可の説明が多いです。

実世界に置き換えて考える

技術的な話に入る前に、日本語の「認証と認可」を理解します。というのも、「認証と認可」という日本語もわからないし、英語の「Authentication、Authorization」もわからないので。。。言語って難しいですね。。。

ググって見ると、「認証と認可」について、「よくわかる認証と認可 | DevelopersIO」という素晴らしい記事がありました、ここを読めば、理解できます。さすがです、クラスメソッドさん。
一部、抜粋させていただきます。

  • 認証:通信の相手が誰(何)であるかを確認すること。(例:マイナンバーカード)
  • 認可:とある特定の条件に対して、リソースアクセスの権限を与えること。(例:チケット/切符の発行)

切符を買った人は電車に乗るということを許可されますけど、それが誰だって構わない。切符さえ持っていれば、誰だって乗れると。それが「認可」です。

後述していますが今回、認可の実例として、運転免許を例にしています。

「運転免許証」を持つこと自体は、あなたが誰かを確認できるものになるから「認証」を意味しますけど、「運転」という行為は、免許証持っていても飲酒してたらしてはいけませんよね。
もう一つ別の例としては、教習所で試験に合格すれば、運転免許証を発行されますが、交通違反を取り締まっている警察官は、免許の点数を操作することはできますが、免許証を発行処理はできないです。この辺が認可されていたり・されなかったりの話です。

なんとなく理解できたのではないかということで、いよいよLaravelについての話に移ります。

Laravelでは、認証が「Guard」、認可が「Gate/Policy」の3パターンありますので、順にそれぞれ触れていきます。

続きを読む »