at posts/single.html

OAuth の Auth は認証?認可?

昨日の日記にOAuth はアクセス制御のための仕様と書いたんだけど、 OAuth のトップページにはこう書かれている。

An open protocol to allow secure API authentication in a simple and standard method from desktop and web applications.

"secure API authentication" ということで、「認証」のプロトコルだよと言ってる。 うーん。ちょっと混乱しそう。 たぶん、大切なのは、誰が誰を認証・認可するのか、ということじゃないかな。

id:hiro_yさんのブックマークに、「認証に対する許可を与えるためのプロトコルのようなイメージでいいのかな」と書かれていて、なるほどな…と思った。 昨日入ったOAuthのメーリングリストでも、"authorization vs. authentication"というメールが流れてる。

Authentication is what you do as a User to access your Service Provider.

Authorization is what you do as a User to give a Consumer access to stuff of yours that is hosted by your Service Provider.

ブックマークのコメントでも書いたけど、僕なりの整理はこんな感じ。

  • ユーザはConsumer (AOuthを使う側のWebアプリ) に対して、 SP (Flickrなど) に載せた写真などのデータへのアクセスを許可(認可)する
  • SP はアクセスしている Consumer が利用者が認可を与えた Consumer かどうかを認証する

つまり、「認証」と「認可」の組み合わせで、WebAPIのアクセス制御を実現している。

ただ、ここで紛らわしいのが「認証」という言葉。 昨日の日記で「認証」と「アクセス制御」を分けるって書いたとおり、OAuthは「認証」の方法を決めていない。 ここで言う「認証」は、SPやConsumerが利用者を認証する方法。 これはOpenIDでも何でも、好きなのを使えばいい。

一方、今日の日記に書いた「認証」は、SPがConsumerを認証する方法。 もう少し厳密に言うと、ただConsumerを認証するだけじゃダメ(これでいいならConsumerとSPの間で適当にパスワードを使えばいい)で、どの利用者からの認可を受けたConsumerかを認証できないといけない。 つまり、同じConsumerでも、Aさんの写真を更新するときと、Bさんの写真を取得するときでは役割が違うということ。 という訳で、「認証」「認可」という言葉が出てきたときは、誰が誰を認証するかを考えるといいかもしれない。

んで、OAuthのAuthは認証と認可の両方の役割があるから、あえてAuthにしているのかも…と思ったり。 前述のメーリングリストのメールにレスがついたら、真相が分かるかも?

関連する日記