1. ホーム
  2. 記事一覧
  3. 【わかりやすく解説】認証と認可の違いとは?セキュリティの考え方

2022.11.18

【わかりやすく解説】認証と認可の違いとは?セキュリティの考え方

こちらの記事では、「認証と認可」について解説します。

認証(Authentication)と認可(Authorization)は、似ているようで意味は全く異なります。近年では、「Auth」という単語だけで「認証」を意味することもあり、「認証」と「認可」を同じような意味で捉えているケースも見受けられます。

こちらの記事を通して、認証と認可の違いについてしっかり学習しましょう。

認証と認可

認証とは、誰であるかを確認すること。 認可とは、とある特定の条件に対して、リソースアクセスの権限を与えること。 そして、認証はサーバで行い、認可はアプリケーション(サービス)で行います。

両者は似たような言葉でもあるため、認証をAuthN認可をAuthZとして区別する事が提唱されています。引用: IT用語辞典

認証とは

認証とは、誰であるかを確認することを意味します。 誰であるかの確認は、知識情報生体情報所持情報の3つの情報から確認します。

  1. 知識情報(What You Know): あなたは何を知っていますか?という、本人しか知り得ない情報のことです。パスワードや秘密の質問などが知識情報に該当します。
  2. 生体情報(What You Are):あなたは誰ですか?という、本人の特徴を示すことです。顔や指紋などが生体情報に該当します。
  3. 所持情報(What You Have):あなたは何を持っていますか?という、対象者が持っているもののことです。携帯電話やICカードなどが所持情報に該当します。

認証プロセス

認証は、ユーザがアプリケーションにログインする時に行われます。

ユーザは、ログインする際にIDやパスワードなどをフォームに入力したり、顔認証などを使ってログインを試みます。この時に使用された情報はサーバに送られます。そして「サーバ」は、送られた情報がサーバに保存してある情報と一致するかをチェックします。このチェック作業が認証です。

ログイン時に用いる情報(知識情報、生体情報、所持情報)を2つ以上組み合わせて使用することを、「多要素認証」(MFA: Multi-Factor Authentication)と呼びます。

認証を正しく行う事は「アクセス制御」とも呼ばれ、対象者を正しく認証し、その対象者以外はアプリケーションにアクセスさせない機能のことを指します。

認可とは

認可とは、「とある特定の条件に対して、リソースアクセスの権限を与えること」と説明しました。

認可は認証とは違い、想像しにくいと思いますので、身近な所から例を挙げて理解していきます。認可を身近な例から挙げると、「鍵の発行」や「切符の発行」などが認可に当たります。

  • 車の鍵が発行されました。車の鍵を持っていると車に乗る事ができます
  • 電車で切符を買いました。この切符を持っていれば電車に乗る事ができます

車の鍵が発行されたことや電車の切符を買ったことで、車に乗る条件や、電車に乗る条件を満たしたことになります。この時、本人であるかどうかは関係ありません。認可を理解する上で重要なことは、自分が誰であるかという考えを切り離して考えることです。

Web開発における認可とは

Web開発における認可を考える時も、まず、相手が誰であるかという考えをを切り離して考える事が重要です。

1つのアプリケーションを企業が使うことを例に挙げて考えます。

一般社員に企業内の全てのファイルやデータにアクセス出来る必要はありませんし、アクセス出来るようにすべきではありません。しかし、人事部であれば全社員の情報を見れる必要がありますし、社長であれば全てのファイルやデータを見れる必要があります。

このようにアプリケーションを使用する人に応じて、情報にアクセス出来る権限を設定することが、Web開発における認可の考え方です。

認証・認可が分かれていた場合

認証と認可は別々でも成り立つのでしょうか?認証だけ・認可だけを実装したアプリケーションを想定して考えます。

認証だけの場合

基本的に認証だけで良いパターンはありません。認可がないということは、ログインした全てのユーザが全ての権限を持っているということになります。

つまり、なりすましハッキングが往々にして行われてしまう事態になります。

認可だけの場合

認可だけで機能するアプリケーションはあります。ログイン機能を必要とせず、アプリケーションを使用する全員に対して同じ権限で良い場合です。インターネット上で使えるツールなどが該当します。

認証と認可の組み合わせ

認証と認可の組み合わせのパターンは2つです。 「認証に基づく認可」と「認可に基づく認証」です。

認証に基づく認可

認証に基づく認可を分かりやすく説明できる例が、「運転免許証」です。

運転免許証には、個人情報と写真により「本人であること」を証明し、その上で「その人に対して運転をする権限」を与えています。この事が、多くの人が認証と認可を同一のように認識してしまう大きな要因です。

この運転免許証は、切符のように誰かに渡しても受け取った人に運転が許されることはありません。なぜなら、認可(運転する権限)が、認証に基づいている(免許証を持っている本人にのみ許可する)からです。

Web開発に置き換えると、ログイン時点でそのユーザが行える権限が紐付いている状態が、認証に基づく認可になります。

認可に基づく認証

認可に基づく認証は、理解するのがかなり難しいパターンですので、なるべく分かりやすく説明していきます。

山田さんは忘れ物をしたが、手を離せないので、鈴木さんに自分の家に忘れ物を取りに行ってもらうために自分の家の鍵を渡しました。山田家からすると、「この人は、山田家の家のドアを開ける鍵を持っているから、山田さんである。」と認識します。家の鍵を開ける事ができ、無事忘れ物を持って来ることができました。

上記のように、認証(山田家の家の鍵を開ける事)してもらうために、相手に認可(自分の家の鍵)を渡すこと。これが、認可に基づく認証です。

現実世界であれば渡した鍵を返してもらえれば大事に至ることはありません。しかしコンピュータの世界では、こういった認証してもらうために使用したトークンやデータのコピーを相手に渡したままにするケースもあります。

そういったケースを利用した仕組みがOAuthです。OAuthは、あるサービスから別のサービスへ認可を渡すためのプロトコルのことです。言葉は馴染みがないかもしれませんが、SNSやWebサービスを日常的に使用する私たちにとって、実は身近に存在しています

何かのサービスにログインしようとした際に、「別のアカウントでサインイン」というのを見た事があると思います。これがOAuthの利用例です。

OAuthの仕組みは便利である反面、個人情報やデータが残り続けるという懸念点があり、セキュリティ面では良くないという事が分かると思います。

まとめ

認証と認可は言葉似ていますが、全く異なる概念だという事が理解できたでしょうか。両者は異なる概念だからこそ、アプリケーションの適切なセキュリティ対策を行う上では、どちらか一方だけ強化すれば良いという事でなく、どちらも強化することが必要です。

ユーザの情報を安全に守る事はもちろんですが、アプリケーションを適切に運用するためにも、認証と認可に対する認識を身に着け、アプリケーションの開発・管理をしていきましょう。

エンベーダー編集部

エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。

RareTECH 無料体験授業開催中! オンラインにて実施中! Top10%のエンジニアになる秘訣を伝授します! RareTECH講師への質疑応答可

関連記事