Arganoの小副川です。 今回の記事では、OAuth2.0 について書きたいと思います。


OAuth2.0 とは

OAuth2.0 は、情報リソースの所有者に代わって、そのリソースにアクセスをするための認可を与えるプロトコルです。 このプロトコルを利用することによって、複数のWebサービスやアプリケーション間でユーザー情報等を共有することができるようになります。

例) Facebook のアカウント情報を使って Instagram のサービスを利用する。


用語の定義

OAuth2.0 を理解する上でかかせない用語について解説します。

  • リソースオーナー
    あるサービスやアプリケーションを利用しようとするユーザーを指します。とどのつまり私達です。

  • リソースサーバー
    リソースオーナーが保護したい情報が格納されているサーバーです。

  • クライアント
    保護されている情報にアクセスをするサービスやアプリのことです。Instagram や Twitter がこれに該当します。

  • 認可サーバー
    リソースサーバーが信頼を置いているサーバーです。Facebook や Google がこれに該当します。ここでリソースサーバーへアクセスするために必要な鍵(アクセストークン)を発行することができます。

  • アクセストークン
    リソースサーバーに保護されている情報へアクセスするために必要な鍵のことです。

  • 認可コード
    認可サーバーに対して、アクセストークンを発行してもらうために必要な証明書になります。


認証と認可の違い

最初にも述べましたが、OAuth2.0 は認可をするためのプロトコルです。認証をするためのものではありません。認可と認証についての違いは下記のとおりです。

  • 認可(Authorization) リソースへアクセスすることに対して、権限を与えることを示します。OAuth2.0 のプロトコルでは、リソースオーナーが認可サーバーに対して情報提供の同意をする部分に該当します。

  • 認証(Authentication) 通信相手が誰であるかの検証をすること。普段、私達がWebサービスを利用する際に、IDやパスワードを使ってログインをしているのが認証に当たります。

OAuth2.0 を認証の代わりに使うことは、セキュリティリスクが伴うため推奨されていません。リスクについて気になる方はこちらの記事に詳しく書かれているので、一読してみて下さい。


認可の流れ

プロトコルを利用して認可をするまでの一例を見てみましょう。

authflow

  1. リソースオーナーがアプリの利用を開始します。
  2. アプリは認可サーバー側にリダイレクトをします。
  3. 認可サーバーはユーザーに対してログイン画面を提供します。
  4. ユーザーはログイン画面からIDとパスワードを入力し、自分が誰であるかを証明します。
  5. 認可サーバーは送られたIDとパスワードから、そのユーザーを特定します。
  6. 本人確認ができたら、ユーザーに対して、アプリ側に情報を提供することに関する同意を求めます。
  7. ユーザーがこれに同意します。
  8. 認可サーバーはアプリに対して、認可コードを発行します。
  9. アプリは認可コードを使って、認可サーバーにアクセストークンを要求します。
  10. 認可サーバーは認可コードの検証をします。
  11. 正しいものだと判断すると、アプリに対してアクセストークンの発行をします。
  12. アプリはアクセストークンを使って、リソースサーバーにユーザー情報の要求します。
  13. リソースサーバーはアクセストークンの検証をします。
  14. リソースサーバーがアプリにユーザー情報を提供します。
  15. アプリはユーザーに対してサービスの提供をします。

この例の中で、6 ~ 14 までが OAuth2.0 のプロトコルになります。3 ~ 5 の認証に関する部分は含まれていません。


まとめ

ざっくりとですが、OAuth2.0 の認可について説明をしてきました。少しでも理解の助けになれば幸いです。