日本語で言うと、それぞれ、識別(Identification)と認証(Authentication)と承認(Authorization)になりますが、特に Authentication と Authorization はどう違うの? ということで個人的なメモ。
簡単に言うと「名前を付ける」ということ。人・物や事柄に対して、それを識別するためのラベル付けを行い、以降はそのラベルを用いてそれらをハンドリングできるようにするということ。このラベルのことを ID と呼ぶ。例えば、巨大掲示板2ちゃんねるでは、基本的に名乗ることが少ないものの、名前欄が設置されているので名前や仮名を入力して、自分に ID を与えることができる。しかし、自分以外の人間が同じ名前や仮名を入力すれば、その人に成りすますことができてしまう。ラベル付けに限って言えば、誰でも制限なくできるものなので、私以外の誰かが ぴろり を ID に使うこともできるし、私に ぽろり という ID を押し付けることもできる。
ぴろり の ID を使う人物が本当に私であるかどうか、という問題は後述の認証の範疇である。
OpenID は、この識別のための仕組み。ブログやホームページなどの任意の URL を ID として利用することができる。
ID を申告したユーザが、その ID で識別される当人であるかを確認する行為のこと。一般的には、ID を名乗るユーザに、その当人しか知らないはずであるパスワードやパスフレーズなどの機密情報を用いて照合を行うことが多い。ID を名乗ることは誰もが可能でも、その ID の秘密を知るのは ID の当人だけだからである。
先の2ちゃんねる掲示板で利用できる「トリップ文字列」はこの認証にあたる。他のユーザに推測されにくいトリップ生成文字列を利用することで、ID 偽装によるなりすましを防ぐことができる。ここで重要になるキーワードは一方向性関数やゼロ知識証明など。
先の「認証」と混同され易いけれど、本来は別のもので、認証された ID がその認証を受けたサービス上で可能な操作を許可・制限すること。 例えば、ユーザID:A はブログ記事を閲覧しかできないが、ユーザID:B はブログ記事の作成と削除ができる、といった具合。 また、アカウントの有効期限が切れた ID であれば、認証は成功するものの、承認に失敗するためにサービスを受けられない、などといったケースが考えられる。 一般的な Web サービスでは、そのサービスにログインできた時点(認証を通った時点)で享受できるサービスの制限、つまりサービスが承認した操作しか提供されないので、承認の存在を認識しにくく混同されやすい。