こちらの記事では、「認証と認可」について解説します。
認証(Authentication)と認可(Authorization)は、似ているようで意味は全く異なります。近年では、「Auth」という単語だけで「認証」を意味することもあり、「認証」と「認可」を同じような意味で捉えているケースも見受けられます。
こちらの記事を通して、認証と認可の違いについてしっかり学習しましょう。
認証と認可
認証とは、誰であるかを確認すること。 認可とは、とある特定の条件に対して、リソースアクセスの権限を与えること。 そして、認証はサーバで行い、認可はアプリケーション(サービス)で行います。
両者は似たような言葉でもあるため、認証をAuthN、認可をAuthZとして区別する事が提唱されています。引用: IT用語辞典
認証とは
認証とは、誰であるかを確認することを意味します。 誰であるかの確認は、知識情報、生体情報、所持情報の3つの情報から確認します。
- 知識情報(What You Know): あなたは何を知っていますか?という、本人しか知り得ない情報のことです。パスワードや秘密の質問などが知識情報に該当します。
- 生体情報(What You Are):あなたは誰ですか?という、本人の特徴を示すことです。顔や指紋などが生体情報に該当します。
- 所持情報(What You Have):あなたは何を持っていますか?という、対象者が持っているもののことです。携帯電話やICカードなどが所持情報に該当します。
認証プロセス
認証は、ユーザがアプリケーションにログインする時に行われます。
ユーザは、ログインする際にIDやパスワードなどをフォームに入力したり、顔認証などを使ってログインを試みます。この時に使用された情報はサーバに送られます。そして「サーバ」は、送られた情報がサーバに保存してある情報と一致するかをチェックします。このチェック作業が認証です。
ログイン時に用いる情報(知識情報、生体情報、所持情報)を2つ以上組み合わせて使用することを、「多要素認証」(MFA: Multi-Factor Authentication)と呼びます。
認証を正しく行う事は「アクセス制御」とも呼ばれ、対象者を正しく認証し、その対象者以外はアプリケーションにアクセスさせない機能のことを指します。
認可とは
認可とは、「とある特定の条件に対して、リソースアクセスの権限を与えること」と説明しました。
認可は認証とは違い、想像しにくいと思いますので、身近な所から例を挙げて理解していきます。認可を身近な例から挙げると、「鍵の発行」や「切符の発行」などが認可に当たります。
- 車の鍵が発行されました。車の鍵を持っていると車に乗る事ができます。
- 電車で切符を買いました。この切符を持っていれば電車に乗る事ができます。
車の鍵が発行されたことや電車の切符を買ったことで、車に乗る条件や、電車に乗る条件を満たしたことになります。この時、本人であるかどうかは関係ありません。認可を理解する上で重要なことは、自分が誰であるかという考えを切り離して考えることです。
Web開発における認可とは
Web開発における認可を考える時も、まず、相手が誰であるかという考えをを切り離して考える事が重要です。
1つのアプリケーションを企業が使うことを例に挙げて考えます。
一般社員に企業内の全てのファイルやデータにアクセス出来る必要はありませんし、アクセス出来るようにすべきではありません。しかし、人事部であれば全社員の情報を見れる必要がありますし、社長であれば全てのファイルやデータを見れる必要があります。
このようにアプリケーションを使用する人に応じて、情報にアクセス出来る権限を設定することが、Web開発における認可の考え方です。
認証・認可が分かれていた場合
認証と認可は別々でも成り立つのでしょうか?認証だけ・認可だけを実装したアプリケーションを想定して考えます。
認証だけの場合
基本的に認証だけで良いパターンはありません。認可がないということは、ログインした全てのユーザが全ての権限を持っているということになります。
つまり、なりすましやハッキングが往々にして行われてしまう事態になります。
認可だけの場合
認可だけで機能するアプリケーションはあります。ログイン機能を必要とせず、アプリケーションを使用する全員に対して同じ権限で良い場合です。インターネット上で使えるツールなどが該当します。
認証と認可の組み合わせ
認証と認可の組み合わせのパターンは2つです。 「認証に基づく認可」と「認可に基づく認証」です。
認証に基づく認可
認証に基づく認可を分かりやすく説明できる例が、「運転免許証」です。
運転免許証には、個人情報と写真により「本人であること」を証明し、その上で「その人に対して運転をする権限」を与えています。この事が、多くの人が認証と認可を同一のように認識してしまう大きな要因です。
この運転免許証は、切符のように誰かに渡しても受け取った人に運転が許されることはありません。なぜなら、認可(運転する権限)が、認証に基づいている(免許証を持っている本人にのみ許可する)からです。
Web開発に置き換えると、ログイン時点でそのユーザが行える権限が紐付いている状態が、認証に基づく認可になります。
認可に基づく認証
認可に基づく認証は、理解するのがかなり難しいパターンですので、なるべく分かりやすく説明していきます。
山田さんは忘れ物をしたが、手を離せないので、鈴木さんに自分の家に忘れ物を取りに行ってもらうために自分の家の鍵を渡しました。山田家からすると、「この人は、山田家の家のドアを開ける鍵を持っているから、山田さんである。」と認識します。家の鍵を開ける事ができ、無事忘れ物を持って来ることができました。
上記のように、認証(山田家の家の鍵を開ける事)してもらうために、相手に認可(自分の家の鍵)を渡すこと。これが、認可に基づく認証です。
現実世界であれば渡した鍵を返してもらえれば大事に至ることはありません。しかしコンピュータの世界では、こういった認証してもらうために使用したトークンやデータのコピーを相手に渡したままにするケースもあります。
そういったケースを利用した仕組みがOAuthです。OAuthは、あるサービスから別のサービスへ認可を渡すためのプロトコルのことです。言葉は馴染みがないかもしれませんが、SNSやWebサービスを日常的に使用する私たちにとって、実は身近に存在しています。
何かのサービスにログインしようとした際に、「別のアカウントでサインイン」というのを見た事があると思います。これがOAuthの利用例です。
まとめ
認証と認可は言葉似ていますが、全く異なる概念だという事が理解できたでしょうか。両者は異なる概念だからこそ、アプリケーションの適切なセキュリティ対策を行う上では、どちらか一方だけ強化すれば良いという事でなく、どちらも強化することが必要です。
ユーザの情報を安全に守る事はもちろんですが、アプリケーションを適切に運用するためにも、認証と認可に対する認識を身に着け、アプリケーションの開発・管理をしていきましょう。
【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。
「フリーランスエンジニア」
近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。
「成功する人とそうでない人の違いは何か?」
私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。
比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。
多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、
エンベーダー編集部
エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。
関連記事
2020.02.25
完全未経験からエンジニアを目指す爆速勉強法
USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
- キャリア・学習法
- エンジニア
2024.09.28
Trivyで実現するTerraformのセキュリティ強化 IaC脆弱性スキャンの方法
インフラのコード化による効率化が進みましたが、一方でコードに潜むセキュリティリスクも拡大しています。これらのリスクを管理するためには、適切なセキュリティスキャンを導入し、脆弱性を早期に発見することが重要です。
- サイバーセキュリティ
- インフラエンジニア
- Terraform
2024.07.24
セキュリティ初級 7つの主要なサイバー攻撃とその対策法
サイバー攻撃とは、悪意を持った個人や団体がインターネットを利用して他人のコンピュータやネットワークに侵入し、情報を盗んだり、システムを破壊したりする行為です。最近では、企業だけでなく個人も標的にされることが増えています。
- サイバーセキュリティ
2022.10.30
XSSの仕組みと対策について
こちらの記事では、XSS(クロスサイトスクリプティング)の仕組みや対策について解説します。
- サイバーセキュリティ