コマンドライン上でOAuth APIを通じてリソースを利用してみる
OAuthとは、リソースオーナーがクライアントに対してリソースサーバが保有する自身のリソースの利用を認可する仕様であり、本来リソースオーナーが直接利用するものではありません(自身のリソースを使うなら認可は要らないはず)。
リソースオーナーがリソースを利用する場合はBasic認証APIを用いればよいのですが、Basic認証APIをサポートしないサービスが散見されます。この場合にはOAuth APIを利用するしかありません。
というわけで、今回はコマンドライン上でOAuth APIを通じてリソースを利用する方法について説明します。以降の手順では、Basic認証のAPIをサポートしないサービスの代表格であるPocket APIを例として用いています。
手前味噌ながらPython3専用のPocket APIライブラリ「py3pocket」も以下の手順を元に作成したものです。良かったら使ってみてください。
手順
手順へ入る前に、PocketのOAuthフローについて確認しましょう。
ここでのユーザはOAuthの定義から言うところのリソースオーナー且つクライアントであり、PocketのWebサーバ(以降Pocketサーバと省略)はリソースサーバ且つ認可サーバとなります。図で表すと下図のような感じでしょうか。
PocketのOAuthフロー
なお、Pocketでは認可グランドはPocketサーバから発行されるリクエストトークンが該当し、ユーザへの認可はその後に行ないます。
1. 先ずは認可を済ませる
コマンドライン上からOAuth APIを利用するには、そのユーザに対して予めリソース利用を認可しておく必要があります。Pocketではリクエストトークンを取得した後に 認可ページを表示します。認可を終えた後、認可継続のため指定URLへリダイレクトします。これでOKです。
認可ページ
ちなみに、py3pocketではauthorize関数がこの処理に該当します。
2. セッションを予め取得する
「4. 認可処理継続のためのリダイレクトを回避する」で後述するように、リダイレクトを回避するためにPocketサーバからセッションを取得しておきます。
3. リクエストトークンを取得する
リクエストトークンはPocketで用いられる認証グランドの形態で、Pocketサーバへ認可要求することにより取得します。ユーザを認可ページへ誘導させる際に併せて送付することになります。
4. 認可処理継続のためのリダイレクトを回避する
通常はユーザを認可ページへ誘導し、認可をもらい、その後認可処理継続のために指定URLへリダイレクトします。しかし、「1. 先ずは認可を済ませる」及び「2. セッションを予め取得する」を予め行っていれば、このリダイレクトを回避してもそのまま認可処理は継続できます。そのため、ここではユーザを認可ページへ誘導するリクエストだけ投げておきます。
逆に言うと、ここでリダイレクトが発生せずに認可ページが表示される場合は認可が済んでいないということになります。そうなった場合には、「1. 先ずは認可を済ませる」もしくは「2. セッションを予め取得する」が済んでいるかどうか確認してください。
5. リクエストトークンをアクセストークンへ変換する
Pocketサーバを通じてリクエストトークンをアクセストークンへ変換します。
6. OAuth APIを通じてリソースを利用する
OAuth APIを通じてPocketサーバへリクエストを投げることで、リソースを利用することができます。リクエストの際には、コンシューマキーとアクセストークンをPOSTパラメータとして設定する必要があるためお忘れなく。
最後に
上記の手順はPocketのOAuth APIを利用することを前提としていますが、他のサービスでも活用できるかと思います。ぜひ試してみてください。