WebサイトやWebサービスを利用するユーザは、認証され認可されているからこそ、そのサービスを利用できます。
ユーザの立場では認証と認可を意識することはほぼありませんが、Web開発の立場では、サービスのセキュリティを確保するためにも、認証と認可の意味や違いはしっかりと把握しておかなくてはいけません。
Web開発における認証と認可はどう違う?
誰もがWebサービスを当たり前のように活用する昨今、Web開発に携わらない人でも耳にしたことくらいはあるのが「認証」と「認可」という用語です。両者にはどのような違いがあるのでしょうか。
簡単に説明すると、認証はその人が「本人であるか」また「誰であるか」を確認することです。そして、認可はその人が権限を持っているかを確認することです。通常、専用の認証・認可基盤が認証と認可のプロセスを担います。
「認証」とは
ネットワークセキュリティやWeb開発において認証(Authentication:AuthN)とは、通信している相手が誰であるかを確認することです。認証により通信しているのは本人であるか、なりすましなどはないかを確認します。
認証を行うための要素が次の3つです。
1. WHAT YOU ARE (inherence factor)
その人自身を提示して本人であることを確認させます。例えば、顔貌・声・指紋・直筆署名など、本人しか持ち得ないものが該当します。インターネットの世界では、指紋や声紋などによる生体認証がWHAT YOU AREに該当します。
2. WHAT YOU HAVE (possession factor)
その人だけが持っているものを提示して本人であることを確認させます。例えば、身分証明書・印鑑・カードなどです。身分証明書は顔写真付きのものも多く、この場合、結果的に「WHAT YOU HAVE」に依存しています。
インターネットの世界では、電子証明書やセキュリティトークンがWHAT YOU HAVEに該当します。
3. WHAT YOU KNOW (knowledge factor)
その人だけが知っていることを提示して本人であることを確認させます。例えば、合言葉・暗号などです。インターネットの世界では、パスワード・秘密の質問などが該当します。
多くの場合、3要素のうち1要素を使って認証しますが、セキュリティをより強固にするため、複数の要素を使う多要素認証を行うこともあります。
「認可」とは
ネットワークセキュリティやWeb開発において、認可(Authorization:AuthZ)とは、リソースへのアクセス権限を与えること、またユーザーがアクセスできる範囲を確認することです。例えば、経理部専用フォルダに、経理部に所属するメンバーのみがアクセスできるように設定する場合などが該当します。
認可の手順は次のとおりです。
まず、Webサービスの管理者がサービスにアクセスできる条件を定めます。条件の一覧は、アクセスコントロールリスト(ACL)と呼ばれ、ネットワークルータを通過するタイミングで、コンピュータがこのリストに基づき自動的にユーザを判別します。リスト上の条件をすべて満たしたユーザは、アクセス許可を得て、Webサービスにログインできるようになります。
認可においては、ユーザが誰であるかは問わず、そのユーザが条件を満たしているかどうかだけを確認しています。例えば、オンラインショップが割引を実施するときにクーポンコードを発行して、クーポンを入力したユーザだけが割引を受けられるようにすることがあります。この場合、Webサービス側から見れば、誰がクーポンを利用したかは関係なく、正しいクーポンコードを入力したかどうかだけで、割引を許可するかを判断しています。
認証と認可は情報セキュリティ上で重要な概念
Webサービスを利用する際、IDとパスワードの入力を求められますが、これによりWebサービスは、通信している相手が誰であるかを確認するための認証をします。本人しか知り得ない情報であるIDやパスワードを使って本人であることを確認し、本人以外からのアクセスを除外します。このような認証の仕組みがなかったら、第三者による不正アクセスやなりすましなどのサイバー攻撃を防ぐことができません。
一方で、認証の仕組みだけでは、Webサービスの運用面でもセキュリティの面でも不十分です。例えば、一般会員と特別会員のようにユーザに複数の種別があるWebサービスの場合、認証の仕組みだけでは、サービスにログインしたすべてのユーザが特別会員だけが知るべき情報も閲覧できてしまいます。
そこで、ログイン済みのユーザに無条件ですべてのWebページの閲覧を許すのではなく、認可の仕組みにより、特定のユーザだけがWebページを閲覧できるように制御する必要があります。
Webアプリケーションにおける認証と認可の代表的な方法
ID・パスワードでユーザを認証し、そのユーザがアクセス許可の条件を満たしていれば認可するというように、認証と認可は実際には密接に関係しています。
ここでは、認証と認可がそれぞれどのように活用されているのか、個別に例を挙げます。
「認証」の代表的な例
認証の仕組みには多くの人が利用しているID・パスワードによる認証のほか、次のような仕組みがあります。
生体認証には、本人しか持ち得ない指紋を使って本人であることを確認する指紋認証や、顔のパーツの位置や大きさなどに基づいて本人であることを確認する顔認証などがあります。また、OAuth認証も様々なWebサービスで活用されています。例えば、Gmailのユーザが、メッセージアプリなどの外部サービスに、Gmailのアドレス帳へのアクセス権限を与えて、メッセージアプリからGmailのアドレス帳を参照できるようにしたい場合があります。これを実現するためには、通常だと外部サービスであるメッセージアプリに、GoogleアカウントのID・パスワードを入力しなくてはなりません。一方、ID・パスワードを入力してしまっては、外部サービスにGoogleサービスに関するすべての権限を与えてしまうことになります。
このときに用いられるのが、Googleサービスから外部サービスに最低限必要な権限のみを委譲するOAuth認証の仕組みです。サービス間で権限情報を受け渡せることにより、ユーザの認可の下で外部サービスがGoogleサービスの情報の一部を取得できるようになります。
その他の認証の仕組みとして、主にWebサービスの開発中に用いられるBasic認証があります。Basic認証は、Webサービスを公開する前に限られた人だけアクセスできるように、IDとパスワードによる必要最低限の認証設定をすることです。
「認可」の代表的な例
例えば、Webサービスの管理者と一般ユーザでアクセスできる範囲を分ける場合などに、認可の仕組みが用いられます。多くのWebサービスでは、一般ユーザが通常用いるメニューに加え、管理者のみがアクセスできる管理メニューがサービス内に設けられています。
仮に管理メニューへのリンクを非表示にして、一般ユーザの目に触れないようにしたとしても、管理メニューのURLを直接入力で指定すればアクセスできてしまいます。このような問題を避けるために、認可の仕組みを用いてアクセス制御します。
そのほか、無償版のユーザと有償版のユーザとで利用できる機能に差をつけたり、アルコールに関するWebサイトなどで、一定の年齢以上のユーザのみ閲覧できるよう制限をかけたりするときに認可の仕組みが用いられます。
まとめ
その人が誰であるかを確認する「認証」、あるいはその人が権限を持っているかを確認する「認可」のうち、どちらか一方でも欠けた場合には、Webサービスのセキュリティが確保できているとは言えません。Webサービスのセキュリティ機能をチェックするときにも、認証と認可がどのように使い分けられているかという点に注目することで、より正確に検証できるでしょう。