SSTエンジニアブログスマートフォン用の表示で見るSSTエンジニアブログSSTのエンジニアによるWebセキュリティの技術を中心としたエンジニアブログです。認証と認可の違いはじめにこんにちは。マイペースを極めつつある診断員の百田です。最近、認証と認可の違いについて考えさせられることがありましたので、今回はそれについてのんべんぐらりと書きつづります。ここでいう「認証」と「認可」はWebアプリケーションにおけるものとします。毎度Webアプリケーションと表現するのも冗長なので、以降では「Webアプリ」とします。ターゲット以降の内容を読む意味がありそうな人はどんな人か考えてみたので、列挙します。認証と認可という言葉の意味を知らない認証と認可の違いがよくわかっていない気がする認証と認可を分けて考えるべき理由がわからない暇人コンセプトわりと長旅になりましたので、何に重きを置いたのかを明確にしておきます。いう点から攻めています。これには理由があります。自分は正直なところ認証と認可の違いを知った時点で、その二つをなぜ分けて考える必要があるのかがわかりませんでした。紆余曲折を経てそれがわかったときには、認証と認可の違いを理解できたという実感を得ることができました。そのため、自分は認証と認可の違いを理解するための根幹は、なぜ分けて考える必要があるのかを理解することにあると考え、今回はこれを主軸としています。今回の構成を簡単に紹介しておきます。以下の項目にてまとめています。認証をざっくり認可をざっくりなぜ分けて考える必要があるのか認証と認可がどんなものであるかを知った上で、なぜ分けて考える必要があるのかを突き詰めよう。認可の違いをまとめていますが、ここに書いたことがすべてではありません。分けて考える必要があるのかでは、ある「ひとつの例」から、認証と認可を分けて考えたい理由を「ひとつ見つける」という内容になっています。そのため、「そういう考え方もありますよね」くらいの感覚で読んでいただけると幸いです。認証をざっくり相手が誰かを確認することです。現実世界では「身分証明書」によって人物を確認することが一例として挙げられます。Webアプリでは「ログインID」と「パスワード」で利用者が誰かを確認することがこれにあたります。認可をざっくり権限(権利)を与えることです。現実世界では、電車の切符によって「電車に乗る権限」を、利用者へ与えることが一例として挙げられます。Webアプリでは利用者に有料記事の閲覧権限を与えることが一例として挙げられます。「お金を払った人ならこの記事を読めます!」という類のものですね。この場合は利用者をログインによって認証し、その利用者が料金を支払っていれば有料記事を読めるという流れになることが多いと思われます。この例の場合は認証を前提とした認可が行われているということになります。分けて考える必要があるのか認可をざっくり説明したところにもあるように、Webアプリにおいては、認証を前提とした認可が行われることが多いように思われます。これでは、なぜ認証と認可を分けて考える必要があるのかというところには納得が行きづらいです。そのため、まず認証と認可を分けない場合どうなるのかを考え、そのうえでなぜ認証と認可を分けて考えたいのかを突き詰めてみます。以下の項目にてまとめています。認証と認可を分けないで考える場合、認証以外では認可が行われないことになります。次に、Webアプリへの機能的な需要を例示します。そのうえで、認証と認可を分けない場合のWebアプリでその需要を満たすときに発生する問題について考えます。最後にどうすれば問題を解決できるかを考えるという流れです。認証によって認可が行われるWebアプリのイメージよくあるSNSのWebアプリをイメージします。イメージしやすいのは、ユーザがログインすることでメッセージや写真の投稿ができるようになるWebアプリです。他によくあるWebアプリの機能(利用者情報の変更、退会など)についてもイメージしてみます。イメージしたWebアプリにログイン(認証)したらできるようになることを簡単にまとめます。以降では、ここでイメージしたようなWebアプリのことを総称して「SNSアプリ」とします。以降では、連携したいWebアプリのことを「連携先のWebアプリ」とします。昨今では写真を投稿できるSNSアプリが複数存在します。利用者が複数のSNSアプリを使用していた場合、「あの写真はどこに投稿したんだっけ?」のようなことが発生し、「まとめて管理できると便利では?」という発想にいたります。その需要に応えるため、SNSアプリと連携し、SNSアプリに投稿した写真を管理するWebアプリが登場しました。ここでいう需要の本質は利用者がSNSアプリに登録しているデータ(写真)を連携先のWebアプリでも使用したいということになります。需要に応えることによって発生する問題しかし、認証と認可が分かれていない場合、利用者がSNSアプリに登録しているデータを、連携先のWebアプリで使用できるようにすると問題が発生します。その問題はSNSアプリへのログインIDとパスワードを連携先のWebアプリに登録する必要があるというものです。SNSアプリ上の写真が管理できる権限を連携先のWebアプリが得るには、連携先のWebアプリが利用者としてSNSアプリに認証される必要があります。そのため、利用者は認証が行えるログインIDとパスワードを連携先のWebアプリに教えることになります。これによって、連携先のWebアプリは写真の管理以外にもメッセージの投稿や利用者情報の変更、退会処理などが可能となります。この連携先のWebアプリに機能的な不備があったり、そもそも悪意のあるWebアプリだったりする場合は、利用者からみて想定外の操作が行われるかもしれません。ここでいう問題の本質は不必要な権限を連携先のWebアプリに与えてしまうということになります。認証と認可が分かれていないSNSアプリは、認証によってあらゆる権限をまとめて認可するため、必要な権限だけ認可することができません。問題の解決方法は、必要な権限だけが与えられる手段を用意することです。ひとつ具体例を挙げると、SNSアプリに認証された利用者が、連携先のWebアプリに対し必要な権限だけを与えられるようにするということになります。いう需要が発生したことになります。おわりに今回は認証と認可の違いについて「Webアプリの連携」を例にまとめてみました。認証と認可の違いを理解するだけであれば、わざわざ連携を例にせずとも複数の権限が存在するWebアプリをイメージするだけで良いと思います。自分としては「どんな嫌なことがあるか」がわかると実感が得やすいので、それがわかりそうな「Webアプリの連携」を例としました。そのせいで後半だいぶごちゃごちゃした印象がありますが、読んでいただけて幸いです。考えた権限のことを指します。おはようございます!事業開発部の清水です。reserved.スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。