OAuth2 implicit grant flow で FitbitAPI の認証をパスするサンプル

これまで、OAuth2 Authenticate code grant flow で FitbitAPI の認証をパスしてデータを取得する事例を書いてきた。implicit grant flow では認証をパスできないのか調べてみた。

Fitbit API の認証を implicit grant flowでパスする際の特徴は以下の通り。

  • implicit grant flow でFitbitAPI の認証をパスするには、アプリケーションタイプを Client として登録する必要がある
  • access tokenの消費期限はユーザが決定する。
  • refresh tokenを使ってaccess tokenを更新する場合、ユーザの承認が必要となる。

本エントリにて、implicit grant flow で FitbitAPI の認証する方法を step by step で追ってみる。

Authenticate code grant flow と implicit grant flow の違いについて、↓が参考になりました。What is the difference between the 2 workflows? When to use Authorization Code flow?

Authenticate code grant flow

Authenticate code grant flow は以下の流れだった。

  • ClientID, ClientSecret から認可コードを取得する
  • 認可コードと accessToken を交換する

accessTokenを取得するためには ClientID, ClientSecret を保持しておく必要があった。
本家から図を転載する。
Authorization_Code_Flow

implicit grant flow

対して、implicit grant flow は以下のような流れとなる。
まず、本家からの図の転載。
Implicit_Flow

まとめると次の通り。

  • ClientIDを使って accessToken を取得する

ブラウザ上で認証画面が表示される。この画面はブラウザである必要があり埋め込んでスルーしたりすることはできない。
許可すると、指定したコールバックURLがパラメータ付きで呼び出される。(当然伏字です)

ここで得られたaccess_tokenを使って、データアクセスAPIを呼び出す。その際、クエリに含まれるaccess_tokenをAPIにアクセスする度に利用する。クエリに付けるのではなくBASIC認証のヘッダとして付与する。

  • URLのクエリからaccess_tokenを取得しBASIC認証で利用する。

access_token を使いまわしていると、いずれ access_token の消費期限に到達する。
消費期限に到達した access_token を使ってデータ取得を行うと、以下のようなレスポンスが返ってくる。

ここで、Authenticate code grant flow と同様に refresh_token を使って access_token を更新する必要があるのだが、ドキュメントに記述があるように、implicit grant flow では refresh_token を取得するために client_id を使って再度認証する必要がある。
client_id はアプリケーションにストアすべきデータではなく、ユーザによる操作が必要。

Unlike the Authorization Code Grant Flow, the refresh tokens are not issued with the Implicit Grant flow. Refreshing a token requires use of the client secret, which cannot safely be stored in distributed application code. When the access token expires, users will need to re-authorize your app.

また、以下に記述があるように、implicit grant flow における access_token の消費期限は Authenticate code grant flow のそれよりも長めに設定される。アプリケーション側で予め消費期限を設定できるが、最終的には認証画面においてユーザが消費機嫌を決めること値が決まる。

Access tokens from the Implicit Grant Flow are longer lived than tokens from the Authorization Code Grant flow. Users may specify the lifetime of the access token from the authorization page when an application uses the Implicit Grant flow. The access token lifetime options are 1 day, 1 week, and 30 days. Applications can pre-select a token lifetime option, but the user ultimately decides.

シェアする

  • このエントリーをはてなブックマークに追加

フォローする