OAuthとは、リソースへのアクセス許可を安全に委譲する認証/認可の仕組みとして、Webサービスにおいて汎用されています。現在、OAuth 1.0とその後継のOAuth 2.0ともよく利用される認証のタイプです。本文では、OAuth 1.0とOAuth 2.0の違いを完全に解説していこうと思います。
また、Apidogは完全無料で利用可能なツールになりますが、次のボタンからこのツールを無料で取得することが可能です。
OAuthとは
OAuthとは、Webサービスにおいて、リソースへのアクセス許可を安全に委譲する認証/認可の仕組みです。OAuthは、主に以下の2つの目的があります。
- リソース所有者の認証情報(パスワードなど)を第三者に開示することなく、リソースへのアクセスを許可できる。
- 異なるWebサービス間で、ユーザーの認証済みの状態を受け渡しできる。
具体的には、次のような流れで動作します。
- クライアント(Webブラウザやアプリなどのリソースにアクセスするクライアント)がリソース所有者の許可を得る。
- リソース所有者はリソース所有サーバー(GoogleやFacebook等)に対して、クライアントにリソースのアクセス許可を与える。
- リソース所有サーバーはクライアントに対してアクセストークンを発行する。
- クライアントはアクセストークンを使って、リソースサーバー(Google DriveやDropboxなど)からリソースにアクセスできる。
これにより、クライアントがリソース所有者の認証情報を知る必要がなくなり、安全性が高まります。代表的なOAuth認証の例としては、Google認証やFacebook認証などがあげられます。
OAuth 1.0とOAuth 2.0について
OAuth 1.0とOAuth 2.0は、どちらもWebサービスにおける認証と認可のためのプロトコルですが、いくつかの重要な違いがあります。
OAuth 1.0
OAuth 1.0は、2007年に最初のドラフトが公開されました。当時、WebサービスAPIの利用が増加しつつあり、ユーザーがサードパーティアプリケーションにアカウント情報を安全に共有できる仕組みが求められていました。
- OAuth 1.0では、クライアントはリクエストトークンとアクセストークンの2種類のトークンを使用します。
- リクエストの署名に、HMAC-SHA1などの暗号ハッシュ関数を使用します。
- リクエストごとに、タイムスタンプとノンスを含める必要があります。
- クライアント側でクライアントシークレットを保持する必要があります。
- 認証フローが複雑で、多くの手順が必要です。
OAuth 2.0
OAuth 1.0で認証フローが複雑であって、モバイルアプリへの対応が困難などの問題を解決するために、OAuth 2.0の開発が始まりました。OAuth 2.0は、2012年に最初のドラフトが公開され、現在では広く採用されています。OAuth 2.0は、OAuth 1.0の問題点を解決し、より柔軟で使いやすい認証・認可フレームワークを提供しています。
- OAuth 2.0では、アクセストークンのみを使用します。
- リクエストの署名には、ベアラートークン(アクセストークンをそのまま使用)を使用します。
- タイムスタンプとノンスは必須ではありません。
- クライアント側でクライアントシークレットを保持する必要はありません(ただし、クライアント認証が必要な場合もあります)。
- 認証フローがシンプルで、手順が少なくなっています。
- リフレッシュトークンを使用して、アクセストークンを更新できます。
- スコープを使用して、アクセス権限をきめ細かく制御できます。
ということで、OAuth 2.0は、OAuth 1.0の複雑さを解消し、より使いやすくなっています。ただし、OAuth 2.0はいくつかのセキュリティ上の問題を抱えているとも指摘されています。例えば、アクセストークンがURLやHTTPヘッダに含まれるため、漏洩のリスクが高くなります。
そのため、OAuth 2.0を使用する際は、適切なセキュリティ対策(TLSの使用、アクセストークンの有効期限を短く設定するなど)を講じることが重要です。
違いを解説:OAuth 1.0とOAuth 2.0
OAuth 1.0とOAuth 2.0の主な違いは以下の3点にまとめられます。
認証フローがシンプルに
- OAuth 1.0: リクエストトークンとアクセストークンの2種類のトークンを使用していた
- OAuth 2.0: アクセストークンのみを使用し、認証フローがシンプルになった
対応アプリの拡大
- OAuth 1.0: 主にブラウザベースのアプリを想定して設計された
- OAuth 2.0: ブラウザ以外のアプリ(スマートフォンアプリなど)にも対応しやすくなった
署名の扱い
- OAuth 1.0: すべてのAPIリクエストで署名の生成が必要であり、リソース側の署名と一致させる必要があった
- OAuth 2.0: 署名の生成が不要になり、代わりにTLS/SSL(HTTPS)が必須となった。これによりアクセストークンの盗聴に対する耐性が向上した
アクセストークンの有効期間とリフレッシュトークンの導入
- OAuth 1.0: アクセストークンの有効期間が長く(1年以上)、盗聴された場合の被害が大きかった
- OAuth 2.0: 有効期間の短いアクセストークンと、リフレッシュトークンの仕組みが導入された。これにより、クライアントは認可を何度も必要とせずに新しいアクセストークンを取得できるようになった
OAuth 2.0の登場により、OAuthを利用できるアプリケーションの幅が広がり、セキュリティも改善されました。これにより、OAuth 2.0はより広く採用されるようになりました。
ApidogではOAuth 1.0と2.0認証も楽に行える
OAuth 1.0と2.0を使用したAPIをテストする際、リクエストトークンかアクセストークンを取得して一緒にAPIサーバーサイドに渡すことで、認証を行う必要があります。OAuth 1.0と2.0認証フローの複雑さによって、これらのAPIをテストすることが容易に行わない場合もよくあります。
そこで、本文では、Apidogという使いやすいAPI管理ツールを利用して、OAuth 1.0と2.0認証を通し、簡単にAPIをテストする方法を皆さんに紹介します。Apidogは、OAuth 1.0とOAuth 2.0などの認証方式にも対応しており、APIテストの際に「Auth」タブで、認証方式を選択することで、必要な情報を記入すれば、簡単にトークンを取得することができます。そして、リクエストを送信する度、これらのトークン情報がリクエストに追加されるので、非常に便利です。
ステップ⒈リクエストを送信する際、Apidogで「Auth」タブに切り替えて、必要に応じて「Auth 1.0」か「Auth 2.0」を選択します。

ステップ⒉必要な情報を記入して、「トークンの取得」ボタンをクリックします。

ステップ⒊記入の情報に問題がなければ、アクセストークンが成功に取得れます。ここで、リクエストを送信する際は、アクセストークンが自動的に追加され、OAuth認証を行うことができます。

また、ここでトークンの有効期限もちゃんと表示され、必要に応じて、トークンを再度取得したり、トークンを削除したりすることもできるので、非常に便利です。
まとめ
本文では、OAuth 1.0とOAuth 2.0の違いについて詳しく解説しました。OAuth 1.0は2007年に登場し、当時のWebサービスのセキュリティ要件を満たしていましたが、認証フローが複雑で、モバイルアプリへの対応が困難などの問題がありました。これらの問題を解決するために、OAuth 2.0が開発されました。OAuth 2.0は、認証フローがシンプルになり、ブラウザ以外のアプリにも対応しやすくなりました。また、署名の生成が不要になり、アクセストークンの有効期間が短くなったことで、セキュリティも改善されました。ただし、OAuth 2.0を使用する際は、適切なセキュリティ対策を講じることが重要です。
また、OAuth 1.0とOAuth 2.0を使用したAPIをテストする際、Apidogというツールを利用することで、簡単にOAuth認証を行い、APIを簡単にテストできるので、OAuth 1.0とOAuth 2.0を使用したAPIをテストする際、Apidogというツールを活用することが便利ですね。
ということで、OAuth 1.0とOAuth 2.0は、それぞれの特徴を理解し、適切に使い分けることが重要です。また、APIのテストにおいては、Apidogのような便利なツールを活用することで、効率的に開発を進めることができるでしょう。