OAuth
一番分かりやすい OAuth の説明
passportの説明
OAuthとは
OAuthはプロトコルのひとつ。
OAuth = 認可(権限の認可:行動やリソースの許可をすること)
権限の認可を行うオープンスタンダードライブラリ。
まず、前提知識として、OAuthという『アクセストークンを発行する仕組み』がある。
アクセストークンは、アプリケーションをAPI経由で操作するときなんかに使われる。
例としてTwitterクライアントを自作するときにアクセストークンを使ったりします。
このOAuthは前述のとおりアクセストークンを発行する仕組みであって、認証については定められていません。認証に必要な、ユーザー情報などの取得については決まっていない。
このOAuthを拡張しユーザー情報の取得についてなどを標準化したのが OpenID Connect
例文
サードパーティアプリによるユーザーのリソースを保持する(Google)HTTPサービスへの限定的なアクセス(一部の操作)を可能にする認可フレームワーク(アクセストークンの発行方法に関するルールのこと)
OAuth認可フロー
OAuth2.0には認証のやりとり手順(フロー)が4種類定めれており、それらはGrant Type
と呼ばれている。
OAuthが必要な理由
第三者のアプリケーションにユーザーの ID & パスワードを渡さない
WebサービスでOAuthを使う理由
提供するWebサービスはアカウント管理なんてやりたくない。
アカウントを発行して管理するサービス提供者側も大変です。発行したアカウントの情報が漏えいでもして、さらにそのアカウントが別サービスでも使いまわされたりしていようものならこちらも \(^o^)/オワタ な状況になることは間違いありません。 というわけで、Web サービスの利用者としてもあちこちにアカウントを作ったりしたくないし、サービス提供側としても、アカウントの管理なんか自分でやりたくないわけです。どうせ最近は誰でも Google や Facebook や Yahoo! なんかのアカウント持ってるんだから、アカウントの管理は実績のある人たちに任せてこっちは**都度「この人誰?」**って聞いて教えてもらえばいいんです。 その仕組みとして、OpenID Connectという認証プロトコルが登場しました。
OAuthにとってのGoogleやFacebook
OAuth2.0の用語では、Facebookは承認サーバー(AS)
認可サーバーの目的は、ユーザーを認証して認可を取得すること。
承認は通常、ユーザーに同意を求めるプロンプトによって取得されます。承認が取得されると、承認サーバーはアプリケーションにアクセス トークンを発行します。
OAuthにSNSサービスを利用する意味
ここまでは良いとしても、それでも混乱することがあります。それは、「自社のサイトにユーザーをログインさせる際、Facebook や Twitter などの外部サービスのアカウントも使えるようにしたい」、という話が出てきたときです。このとき「OAuth 認証」という言葉が出てくることが多いため、「やはりうちのサイトでも OAuth を実装しなければならないのでは?」と勘違いしてしまうことがあります。しかしこのケースでは、自社サービスは、外部サービスが実装した OAuth を利用する側ですので、自社サービス自体は OAuth を実装する必要はないのです。正確に言うと、他社の OAuth を利用するためのコード (すなわち OAuth クライアント) を書く必要はありますが、自社サービス用の OAuth サーバーを実装する必要はないのです。
OAuthがない場合
OAuthは、第三者となるアプリケーションに対して安全にアクセス権限を提供するためのプロトコル。
たとえば、GitHubのAPIを利用するアプリケーションAをOAuthなしで使うとすると、通常はGitHubのユーザIDとパスワードをアプリケーションAに預ける必要がある。
この手法ではパスワード漏洩の危険が増しますし、アプリケーションAはGitHubに対してユーザと同じ権限を持つことになってしまう。
アプリケーションAの運営者がその気になれば、ユーザをGitHubから退会させることもできるでしょう。
OAuthを利用すると、パスワードをアプリケーションAに渡さずともよくなります。さらに、アプリケーションAがその機能を提供するのに必要な権限だけを与えることができる、