OpenIDを解説する際にしばしば登場する「認証」「認可」の言葉はそれぞれどういった意味で利用しているのでしょうか。両者は明確に区別しなければならないものなのでしょうか。また、OpenID Authenticationについても教えてください。
「認証」「認可」は、OpenID以外でもセキュリティ関連のトピックではしばしば登場する単語です。いったん理解してしまえばさほど難しいものでもありませんが、多くの人が混同されているようですのでこの機会にしっかり覚えてしまいましょう。認証・認可は英語では以下のような単語になります。
認証を別の言葉でかみ砕いて説明すると、「本人確認」のことだといえます。多くの場合、本人を識別するIDと、その本人しか知り得ぬであろうパスワードの対が一致すれば、“自称”本人が紛れもなく本人であると見なすといった具合で「認証」を行うことになります。
ネットワークやサーバへ接続する際に本人性をチェックし、正規の利用者であることを確認する方法。一般には利用者IDとパスワードの組み合わせにより本人を特定する。認証がなされると、本人が持つ権限でデータへのアクセスやアプリケーションの利用が可能となる。不正利用を防ぐため、パスワードの漏えいなどには十分な注意が必要である。
一方、認可(Authorization)とは、認証済みの利用者に対して、何らかのサービスの利用やリソースへのアクセスなどに対する権限を与えたりすることを指します。
具体的には、「AさんはBさんと友達なのでBさんのプライベート日記を閲覧することができる」というシナリオで、AさんがAさんであると確認することが認証であり、AさんはBさんと友達なので閲覧可能という制御を行うことが認可です。
より身近でややこしい例としては、Basic認証やDigest認証といったhttpd上での認証が挙げられます。これらは認証と銘打っていますが、
の両方を取り扱っています。こうしたものが「認証」「認可」を混同させる基だといえますが、この2つは区別して考えるべきものです。
認証(Authentication)によって確認された利用者を識別して、アクセス権限の制御を行い、利用者ごとに固有のサービスを提供すること。
具体的には、利用可能なアプリケーションの制御、ファイルに対する“読み/書き/実行”の権限など、利用者の資格に応じて許可する。認可のための属性情報には、利用者ID/所属グループ/役職/部署/アクセス制御リスト(ACL)などがある。
OpenID Authenticationは、名前の中にAuthentication(認証)と含まれていることからも分かるとおり、OpenID Providerが行う認証のことです。どのような認証を行うかといえば、ユーザーが所持していると主張しているURLであるClaimed Identifierが本当にそのユーザーの所有するURLなのかどうかということを確かめるといったものです。
「ユーザーの細かなプロファイル情報を取得するには」の際にも登場したsreg(Simple REGistration extension)やAX(Attribute Exchange)といった拡張仕様は特定のリソースと見なせ、OpenID認証と同時にユーザーがOP(OpenID Provider)に預けたプロフィール情報をRP(Relying Party)が取得できるので、認可が存在するとみることもできます。
最近話題のOAuthというプロトコルは、特定のリソースへのアクセス権にかんして認可するプロトコルです。出自やプロトコルが少し似ているので困惑するかもしれませんが、認証と認可という違いがあることを覚えておいてください。
OAuthについては、「APIアクセス権を委譲するプロトコル、OAuthを知る」をご覧ください。
サイボウズ・ラボで研究開発にいそしむPerlハッカー。Perlを中心とした開発のノウハウやネタをShibuya Perl Mongersのイベントで発表するなど講演活動も行う。最近ではOpenIDの実装方法や考察などをブログ「Yet Another Hackadelic」などで書き連ねている。
実は簡単なOpenIDの認証手続き
ユーザーの細かなプロファイル情報を取得するには
OpenIDに対応するメリットは?
OpenID入門――その導入で何が変わって何が変わらないのかCopyright© 2012 ITmedia, Inc. All Rights Reserved.